3

エージェント:

agent_id (primary key)

ユーザー:

f_id (foreign key)
type

私はこのように関係を築きました

public function relations() {
    return array(
        'user' => array(self::HAS_ONE, 'Users', 'f_id'),
    );
}

type=3ただし、Userテーブルにある場合にのみ結合などの条件を追加したいと思います。

ありがとう。

4

3 に答える 3

10

これを使用する場合、「プロパティ「CHasOneRelation.0」が定義されていません」のようなエラーはありません。

public function relations()
{
    return array(
        'user' => array(
            self::HAS_ONE, 
            'Users', 
            'f_id',
            'on' => 'user.ref_type = :type', 
            'params' => array(':type' => 3))
    );
}

このリンクを参照してください:http ://www.yiiframework.com/forum/index.php/topic/10185-using-relations-and-conditions/

于 2013-04-14T14:48:47.077 に答える
8

関係に条件を追加します

public function relations() {
    return array(
        'user' => array(self::HAS_ONE, 'Users', 'f_id', array(
            'condition' => 'user.type = :type',
            'params' => array(':type'=>3)
        )),
    );
}

http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-options

于 2012-06-05T03:57:24.063 に答える
0

このリレーションを使用しない場合でも、より多くのクエリを使用するlazy-loadを使用するのではなく、ユーザーを取得する関数を作成する必要があります。

public function getUser(){
    return Users::model()->find(array(
        'condition'=>'type = :type', 
        'params' => array(':type'=>3)
    ));  
}

これを使用することにより、キャッシュ機能を使用して、リレーションがサポートしていないクエリをキャッシュできます。

public function getUser(){
    return Users::model()->cache(1000)->find(array(
        'condition'=>'type = :type', 
        'params' => array(':type'=>3)
    ));  
}
于 2012-06-05T13:52:00.297 に答える