0

我考虑过使用像 Doctrine 这样的实际 ORM,然后我认为它的下载链接甚至被破坏了......所有在线教程都可以追溯到 2011 年。我还必须编写 yaml 文件。

然后我开始尝试用 ORM 风格编写我自己的模型类。

我只是用字段填充它并将其保存到数据库,这很容易。

但是我在尝试从数据库中检索数据时遇到了问题。

class User extends CI_Model {

    public $id;
    public $email;
    public $displayName;

 public function save() {
  .....
 }

public function search_by_email($email) {
    $user = new User();
    $this->db->select('email')->from('user')->where('email', $email);
    $result = $this->db->get();
    if ($result->num_rows()==0) {
        return false;
    }else {
        foreach ($result->result() as $field) {

        }
    }
}

我通常在 CodeIgniter 中知道,您返回$query->result(),以及 ORM 自定义,我正在尝试返回一个对象......有没有办法做到这一点?我应该使用什么功能?

4

2 回答 2

1

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
}

关于您的评论,我很确定codeigniter 对您传递给该方法的类一无所知。result看起来它只是实例化它并为从数据库返回的每个列/值设置属性和值:

$this->custom_result_object[$class_name][$i] = new $class_name();

foreach ($this->{$_data}[$i] as $key => $value)
{
    $this->custom_result_object[$class_name][$i]->$key = $value;
}
于 2013-09-24T01:49:43.343 回答
0

一个与 codeIgniter 配合得很好的 ORM 是php-activerecord,它基于 Rails 活动记录模型。

您尝试复制“search_by_email”的功能是通过

Late static binding method.

所以你可能会看到这样调用的函数:

Object::find_by_email()

Object::search_by_email()
于 2013-09-24T01:50:37.780 回答