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

factory、などに関するkohenaのドキュメントを調べましたがfind、何をしているのか、何をしていないのかがわかりませんでした。私は何かが足りないのですか?私はそれを使用して動作させました:find_allfactoryfindfind_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 に答える