将模型与CodeIgniter中的查询结果联系起来?

时间:2011-09-23 21:56:00

标签: codeigniter model

以下是他们的文档说明

  

您还可以将字符串传递给表示类的result()   为每个结果对象实例化(注意:必须加载此类)

$query = $this->db->query("SELECT * FROM users;"); 
foreach ($query->result('User') as $user) {    
    echo $row->name; // call attributes    
    echo $row->reverse_name(); // or methods defined on the 'User' class 
}

尽管事实上他们正在回应$ row而不是$ user ...这对我来说似乎不起作用。这是我的测试版本

模型

class User extends CI_Model{
    var $first;
    var $last;
..  
    function getName() {
        return $this->first + " " + $this->last;
    }
}   

控制器

class Tester extends CI_Controller {

     public function index() {
          $this->load->model('User');
          $query = $this->db->query('SELECT * from USERS');
          $data = array (
              'regular' => $query->result(),
              'modeled' => $query->result('User')
          );
          $this->load->view('test', $data);
     }
}

查看

foreach ($regular as $row) {
    echo "{$row->FIRST} {$row->LAST} <BR/>";
}

echo "<br/>";

foreach ($modeled as $row) {
    echo "{$row->getName()} <BR/>";
}

有什么我做错了或误会吗?我会假设根据他们的文档,如果我将一个类分配给结果集,那么该类应该填充结果吗?现在,如何知道要映射到哪个字段对我来说是一个谜,很可能是为什么这不起作用的原因。我想也许我需要修改构造函数来进行这种映射,但是我没有看到任何关于我将如何去做的文档。我尝试为构造函数添加一个参数,假设它是一个StdClass数组,但似乎不起作用。

任何澄清都会很棒!

1 个答案:

答案 0 :(得分:0)

所以我突然想到检查db_results函数的实际源代码,并且我认为这是由于查询结果列的情况。除非您在查询字符串中将其指定为小写,否则CI似乎默认所有内容都为UPPERCASE。

总而言之,无论您的查询中的列是什么情况,都应该是模型中值的情况!

虽然看起来很荒谬......我可能会看到我是否可以编辑核心类而不区分大小写。除非有人有更好的选择。