Kohana 3.3 ORM :: factory('foo',$ id)不加载模型,缺少某些东西?

时间:2013-03-08 22:30:47

标签: php kohana kohana-orm

我有以下型号:

class Model_Job extends ORM
{
    public $ID;

    public $user_ID;
    public $title;
    //some more variables
}

在我的控制器中,我有一个函数action_view();查看作业详细信息单个作业,与http://kohanaframework.org/3.3/guide/orm/using#finding-an-object

完全相同
public function action_view()
{
    $this->render('Shit');
    $this->template->content = View::factory('jobs/job')
                                    ->bind('job', $job);

    $job = ORM::factory('job', $this->request->param('id'));                    
}

我有另一个函数action_all(),它只使用find_all获取所有作业并将它们放在页面上,这很有效(意味着echo $job->ID执行它应该做的事情;回显ID。但是action_view()没有。我会放置一些echo Debug::vars($job)

的输出
object Model_Job(39) {
    public ID => NULL //Note they are NULL
    public user_ID => NULL 
    public title => NULL
    ......................
    protected _object => array(5) (
        "ID" => string(1) "1"
        "user_ID" => string(1) "1"
        "title" => string(14) "Testbaantjeeee"
        ................
    )
    .....................
 }

来自echo Debug::vars($job)的{​​{1}}的示例如下:

action_all()

我查看了kohena关于object Model_Job(39) { public ID => 1 //Note they are NOT NULL public user_ID => 1 public title => "Testbaantjeeee" ...................... protected _object => array(5) ( "ID" => string(1) NULL //now these are NULL "user_ID" => string(1) NULL "title" => string(14) NULL ..................... ) ..................... } factoryfind等的文档,但无法弄清楚find_allfactory没有做什么{ {1}}正在做。我错过了什么吗?我用它来工作:

find

但这样做对我来说毫无意义。我错过了什么?

2 个答案:

答案 0 :(得分:1)

我继续前进并解决了这个问题。

我创建了一个班级Model_Base

class Model_Base extends ORM
{
    public function Load()
    {
        foreach($this->object() as $key => $value)
            if(!is_object($value))
                if(property_exists(get_class($this), $key))
                    $this->$key = $value;
    }
}

现在我从这里扩展我的所有模型

class Model_Job extends Model_Base
{
    ..................
}

现在我的控制器使用了这个:

public function action_view()
{
    $this->render('Shit');
    $this->template->content = View::factory('jobs/job')
                                    ->bind('job', $job);

    $job = ORM::factory('job', $this->request->param('id'));
    $job->Load();
}

它转储:

object Model_Job(39) {
    protected _primary_key => string(2) "ID"
    public ID => string(1) "1"
    public user_ID => string(1) "1"
    public title => string(14) "Testbaantjeeee"
    ......................
}

我仍然认为没有意义。但是无所谓。如果有人知道他们为什么find()/factory('foo', $id)find_all()如此根本不同以致前者毫无用处,请告诉我们:)

答案 1 :(得分:0)

您正在为您的ID使用不同的密钥,它是大写ID。确保在模型中设置

protected $_primary_key = 'ID';

因为按照你的例子,两种方法都应该完全相同。