私の目標は、ユーザー名と名前、および採用年と学期を介してドキュメントを検索できるようにすることです。ドキュメントは、ドキュメントが正確に1つの宣言に接続され、宣言が正確に1つのドキュメントに接続されるか、まったく接続されないように、宣言にのみ関連付けられます。
宣言は、OutgoingStudentとRecrutationに関連しています。
したがって、ドキュメントをクエリするときは、Declarationテーブルを介してOutgoingStudentとRecrutationsにもクエリを実行します。
ドキュメント内の関係の私のコード:
return array(
'declaration' => array(self::BELONGS_TO, 'Declaration', 'DeclarationID'),
'outgoingStudentUserIdUser' => array(self::HAS_ONE, 'OutgoingStudent', 'OutgoingStudent_User_idUser','through'=>'declaration',),
'Recrutation' => array(self::HAS_ONE, 'Recrutation', 'Recrutation_RecrutationID','through'=>'declaration'),
);
そして今、search()関数でクエリを実行したい->
'declaration','outgoingStudentUserIdUser' and 'Recrutation':
$criteria->with = array('declaration','Recrutation','outgoingStudentUserIdUser');
このエラーが発生します:
CDbCommandniezdołałwykonaćinstrukcjiSQL:SQLSTATE [42000] [1066]一意ではないテーブル/エイリアス:'宣言'。実行されたSQLステートメントは次のとおりです。SELECTCOUNT(DISTINCT
t
。DeclarationID
)FROMDocuments
t
LEFT OUTER JOINDeclarations
declaration
ON(t
。DeclarationID
=declaration
。idDeclarations
)LEFT OUTER JOINRecrutation
Recrutation
ON(declaration
。Recrutation_RecrutationID
=Recrutation
。RecrutationID
)LEFT OUTER JOINDeclarations
declaration
ON(t
。DeclarationID
=declaration
。idDeclarations
)LEFT OUTER JOINOutgoingStudent
outgoingStudentUserIdUser
ON(declaration
。OutgoingStudent_User_idUser
=outgoingStudentUserIdUser
。User_idUser
)
のみを使用する場合、$criteria->with = array('declaration','Recrutation')
または$criteria->with = array('declaration','outgoingStudentUserIdUser')
両方を使用する場合のみエラーは発生しません。
おそらくそれは他の方法で行われるべきですが、どうやって?