私は最初のアプリケーションをYii(v1.1.12)で作成していますが、学習曲線が少し急なので、助けが必要です。
次の表(およびそれらの関係)を想像してみてください。
- 詳細(n:1)ドキュメント
- ドキュメント(n:1)ユーザー
- ユーザー(n:1)部門
- ドキュメント(n:1)カテゴリ
user
ログインしてアプリケーションを使用できるユーザーに関する情報を保持するテーブルです。
私は( Giiを使用してハッキングして)すべてのドキュメントを一覧表示するビューをまとめることができました。また、グリッドにカテゴリIDの代わりにカテゴリ名を表示することもできました。
実装したい機能の1つは、ユーザーがビューを切り替えて、(a)ログインしたユーザーに関連するドキュメントのみが一覧表示されるようにするか、(b)自分の部門に関連するドキュメントのみが一覧表示されるようにすることです。
運が悪かったので少し見回しました。誰か助けてもらえますか?
乾杯、ジョージ
更新:Currenltyを使用してドキュメントのリストを表示しますzii.widgets.grid.CGridView
。
更新2:Omarの参照に続いて、このURLの主題についてもう少し詳しく説明しているCDbCriteria
ことがわかりました。
私は次のモデルコードを思いつきました。これは正常に機能します。
public function searchByUser($user_id)
{
$criteria=new CDbCriteria;
$criteria->condition = " user_id = ".$user_id;
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
public function searchByDepartment($user_id)
{
$criteria=new CDbCriteria;
$criteria->alias="p";
$criteria->join = "JOIN (SELECT u.id
FROM user u
INNER JOIN user uu
ON u.department_id = uu.department_id
WHERE uu.id = ".$user_id.") uu
ON p.user_id = uu.id";
return new CActiveDataProvider($this, array('criteria'=>$criteria,));
}
上記は期待どおりに機能しますが、切り刻まれたSQLコードをまったく記述しなくてもよいソリューションを望んでいました。怠惰によるものではなく、フレームワークの機能をさらに活用するためです。
このアプローチはベストプラクティスに従わないと感じています(?)。