【发布时间】:2012-11-01 00:12:28
【问题描述】:
我正在使用 Yii (v1.1.12) 编写我的第一个应用程序,我的学习曲线有点陡峭,所以我需要一些帮助。
想象以下表格(及其关系):
- 详细 (n:1) 文档
- 文档 (n:1) 用户
- 用户 (n:1) 部门
- 文档 (n:1) 类别
user 是保存有关可以登录和使用应用程序的用户信息的表。
我已经设法组合(使用 Gii 和修改)一个列出所有文档的视图,并且还设法在网格中显示类别名称而不是类别 ID。
我想要实现的功能之一是允许用户切换视图,以便 (a) 仅列出与登录用户相关的文档,或 (b) 仅列出与其部门相关的文档。
我环顾四周,没有运气。有人可以帮忙吗?
干杯, 乔治
更新:当前我使用zii.widgets.grid.CGridView 显示文档列表。
更新 2:
在 Omar 对CDbCriteria 的引用之后,我找到了this URL,其中包含有关该主题的更多详细信息。
我想出了以下模型代码,效果很好:
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 代码的解决方案。不是因为懒惰,而是为了利用框架的更多功能。
我只是觉得这种方法没有遵循最佳实践 (?)。
【问题讨论】:
-
您目前如何在您的视图中列出文档?你是在使用 CGridView / CListView / 还是其他方法?
-
我编辑了我的问题以澄清这一点。