0

我有以下模型:

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)而from的示例action_all()如下所示:

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
        .....................
    )
    .....................
 }

我查看了 kohena 的关于factory,等的文档findfind_all但无法弄清楚正在做什么factoryfind没有做什么find_all。我错过了什么吗?我让它工作使用:

$job = ORM::factory('job')
           ->where('ID', '=', $this->request->param('id'))
           ->find_all()[0];

但这样做对我来说完全没有意义。我错过了什么?

4

2 回答 2

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()根本不同以至于前者没用,请告诉我:)

于 2013-03-12T08:40:17.510 回答
0

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

protected $_primary_key = 'ID';

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

于 2013-03-13T11:25:38.030 回答