Codeigniter查询结果返回带有setter的自定义结果对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeigniter查询结果返回带有setter的自定义结果对象相关的知识,希望对你有一定的参考价值。
CI自定义对象的工作原理是什么?
根据CI文档您还可以将一个字符串传递给result(),它表示要为每个结果对象实例化的类(注意:必须加载此类)
$query = $this->db->query("SELECT * FROM users;");
foreach ($query->result('User') as $row)
{
echo $row->name; // call attributes
echo $row->reverse_name(); // or methods defined on the 'User' class
}
}
这是一个非常好的功能,然而Ci所做的是它将返回一个User
对象数组,并从行设置属性。
我有一个问题,我想要更多地控制在设置/获取之前要公开访问的属性和要修改的内容。
我怎么能做到这一点?我可以告诉CI将所有属性传递给构造函数,以便类可以填充自己的数据吗?
示例类用户
class User{
private $data=array();
protected $CI;
//public $id,$name,$dob,$gender,$role,$username,$password,$salt,$picture,$lastactive;
function __construct($data=null)
{
$this->data = $data; // i want to save data to a private var and allow attr. throu getters only
}
function set_password($p){
$this->generateSalt();
$this->data->password = $p.$this->data->salt;
}
}
简而言之::
我想使用custom_result_object,但我不希望codeigniter为我填充类属性,而是希望类接收那些attrs并以他自己的方式填充它自己的方式。
答案
我在为自己寻找解决方案时找到了你的问题。
在文档中挖掘了一下后,我设法弄明白了:
class user_item {
// you can declare all the attributes you want as private
private $id,$name,$dob,$gender,$role,$username,$password,$salt,$picture,$lastactive;
function __construct(){
// you can use the constructor to format data as needed
$this->username = strtouppper($this->username);
}
public function set_password($p){
$this->generateSalt();
$this->password = $p.$this->salt;
}
public function get_password(){
return $this->password;
}
}
设置完成后,您可以从$this->db->result()
实例化此类
class User_model extends CI_Model {
public function get_user($id){
return $this->db->get_where('users', array('id' => $id), 1)->result('user_item');
}
}
并根据需要调用该类的任何公共方法或属性
class Users extends CI_Controller {
function __construct(){
$this->load->model('user');
}
public function profile($user_id){
var $myUser = $this->user->get_user($user_id);
$myUser->set_password('myPassword');
echo $myUser->get_password();
}
}
我已经简化了代码以使其更清晰,但你明白了。
另一答案
此示例控制器使用结果数组和对象
if ($this->session->userdata('id_jurusan') ==1) {
$where=array('id_jurusan'=>$this->session->userdata('id_jurusan'));
$value = $this->session->userdata('id_jurusan');
$value2 = $this->session->userdata('username');
$data['rule']=$this->guru_mod->get_where($where,'forward_changing')->result();
$data['fuzzy']=$this->guru_mod->get_data_all('fuzzy')->result();
$data['artikel']=$this->guru_mod->get_data_all('artikel')->result();
$data['kondisi']=$this->guru_mod->get_where($where,'kondisi')->result();
$data['artikel2'] = $this->guru_mod->get_data_all2('artikel','id_jurusan',$value);
$data['riwayat_rule'] = $this->guru_mod->get_data_all2('forward_changing','username',$value2);
$data['kondisi_rule'] = $this->guru_mod->get_data_all2('kondisi','id_jurusan',$value);
$this->load->view('guru/daftar_rule',$data);
}
以上是关于Codeigniter查询结果返回带有setter的自定义结果对象的主要内容,如果未能解决你的问题,请参考以下文章
Codeigniter - 如果数据库查询没有返回结果,则执行操作
Mysql 查询在 Codeigniter 中返回空结果,但在本机 PHP 中工作正常
Codeigniter 未显示 MySQL 查询获取的数组的正确结果。