0

Yii フレームワークを使用しています。複数のテーブルからレコードを取得する方法を知りたいのですが、調査しましたが、有用なリンクが見つかりませんでした。このために次のコードを使用しています。不足している場所を教えてください。

私のモデルTask.php

public function relations()
{
    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.
    return array(
        'prj_user' => array(self::BELONGS_TO, 'User', 'id'),
    );
}

モデル User.php

public function relations()
{
    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.
    return array(
        array('task', self::HAS_MANY, 'Task','project_id')
    );
}

これが私のメインコントローラーです

$criteria = new CDbCriteria;
$criteria->compare('t.id', 1);
$criteria->with = array( 'prj_user' => array('select' => 'username,title,roles', 'joinType'=>'inner join'));

$rows = Task::model()->findAll( $criteria );

それでもタスクテーブルからのみ列を取得していますが、ユーザーテーブルからさらに3つの列が必要です助けてください

4

1 に答える 1

0

あなたのテーブルへの参加は Yii に任せてください。あなたの関係は問題ないように見えるので、それらに直接アクセスできるはずです

たとえば、これは何を返しますか?

foreach ($rows as $task)
{
    if ( isset($task->prj_user) )
        echo $task->prj_user->username . "<br>";
}

それともこれ?

this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>new CActiveDataProvider('Task'),
    'columns'=>array(
        'id',
        'prj_user.username',
        'prj_user.title',
        'prj_user.roles',
    )
));

->with() は熱心な読み込みに使用されるため、この時点ではおそらく必要ありません。実際、私があなたを完全に読み違えていない限り、基準をまとめて削除することができます。

于 2013-06-13T02:54:06.560 に答える