Yii 2.0で多対多リレーションシップを使用して接続/接合テーブルの値にフィルタを適用するにはどうすればよいですか?Yii 2ジャンクションテーブルの値に多対多の関係をフィルタリングします
私は、次の表を持っているメンバーは、彼らが受け入れられるか、モデルファイルEvent.phpから
を拒否している場合は、整数を伝えると、EventMemberConnectionを通じてイベントに接続されている
Member (id INT, name, ...)
Event (id INT, name, date, ...)
EventMemberConnection (id INT, event_id INT, member_id INT, accepted TINYINT(1) DEFAULT 0, foreign keys....)
:
/**
* @return \yii\db\ActiveQuery
*/
public function getAcceptedMembers() {
return $this->hasMany(Member::className(), ['id' => 'member_id'])->viaTable('EventMemberConnection acceptedConnection', ['event_id' => 'id'])->onCondition(['acceptedConnection.accepted' => 1]);
}
/**
* @return \yii\db\ActiveQuery
*/
public function getDeclinedMembers() {
return $this->hasMany(Member::className(), ['id' => 'member_id'])->viaTable('EventMemberConnection declinedConnection', ['event_id' => 'id'])->onCondition(['declinedConnection.accepted' => 0]);
}
残りのコントローラ内のクエリ:
public function prepareDataProvider() {
$query = Event::find();
$query->joinWith('acceptedMembers acceptedMember');
$query->joinWith('declinedMembers declinedMember');
$query->groupBy(['Event.id']);
return new ActiveDataProvider([
'query' => $query
]);
}
私は、REST APIを使用して、acceptedMembersとdeclinedMembersの両方で拡張されたイベントオブジェクトを取得しています。私は、メインクエリは罰金行ったことを推測
Column not found: 1054 Unknown column 'acceptedConnection.accepted' in 'where clause'
The SQL being executed was: SELECT * FROM `Member` `acceptedMember` WHERE (`id` IN ('5', '9')) AND (`acceptedConnection`.`accepted`=1)
が、Yiiのは、それはOnConnectionに関数の中で使用される条件を追加し、関連するメンバーを取り出し、余分な呼び出し:私は、呼び出しから次のデータベースエラーが発生します。
私はdocumentationで、関連テーブルのみでフィルタリングし、接合テーブルではフィルタリングしないと仮定しています。だから私はonConditionが行く方法だとは思わない。
ジャンクションテーブルに設定された値にリレーションをフィルタリングする方法はありますか?
お問い合わせはどこですか?クエリには結合がありません。 –
ありがとう、私は質問に追加しました。 –