2

フィールドを持つchatテーブルがあります

 admin TINYINT
 owner_id INTEGER

目標は、Yii で 2 つの関係を持つことです。

'admin'=>array(
    self::BELONGS_TO, 'Admin', 'owner_id',
    'condition'=>'admin=1',
 ),

'user'=>array(
    self::BELONGS_TO, 'User', 'owner_id',
    'condition'=>'admin=0',
 ),

しかし、私は を取得し、管理テーブルに列を追加するだけで管理できたので、次のように書くことができましGeneral error: 1 no such column: adminall_onesall_zeros

        'admin'=>array(
            self::BELONGS_TO, 'Admin', array('owner_id' => 'id', 'admin' => 'all_ones'),
        ),


        'user'=>array(
            self::BELONGS_TO, 'User', array('owner_id' => 'id', 'admin' => 'all_zeros'),
        ),

そのようなハックを使用せずにそれを実装する方法は何ですか?

4

1 に答える 1

3

解決策 1:

リレーションを User モデルに配置します (リレーション条件は、リレーションが定義されているモデルではなく、関連するモデルをフィルター処理するため)

//On the User model:

'chatsAdmin'=>array(
   self::HAS_MANY, 'Chat', 'owner_id',
   'condition'=>'admin=1',
),
'chats'=>array(
   self::HAS_MANY, 'Chat', 'owner_id',
   'condition'=>'admin=0',
),

解決策 2:

ファインダーを使用して、フィルタリングされた一連のチャット (または DataProvider) を取得します

//relation on chat (without condition!)
'user'=>array(self::BELONGS_TO, 'User', 'owner_id')

//finder on chat model, will return ALL (use CActiveDataProvider if you need paging..)

Chat::model()->with('user')->findAll('user.admin=:admin', array(':admin'=>1))
于 2012-11-30T07:37:48.363 に答える