我有下一个问题。
部分代码:
$result = $this->find('all', array(
'contain' => array(
'User' => array(
'fields' => 'id',
'conditions' => array(
'id' => $user_id
)
)
),
'fields' => 'url'
));
这个find()在Project模型类的方法中调用,我想只检索User.id等于传递给我的方法的一些用户id的项目。 用户HABTM项目和项目HABTM用户。
但执行后我有下一个:
app/views/projects/index.ctp (line 1)
Array
(
[0] => Array
(
[Project] => Array
(
[url] => http://purpled.biz
[id] => 1
)
[User] => Array
(
[0] => Array
(
[id] => 4
[ProjectsUser] => Array
(
[user_id] => 4
[project_id] => 1
[projects_users_role_id] => 0
)
)
)
)
[1] => Array
(
[Project] => Array
(
[url] => http://google.com
[id] => 2
)
[User] => Array
(
[0] => Array
(
[id] => 4
[ProjectsUser] => Array
(
[user_id] => 4
[project_id] => 2
[projects_users_role_id] => 0
)
)
)
)
[2] => Array
(
[Project] => Array
(
[url] => http://test.com
[id] => 3
)
[User] => Array
(
)
)
)
如你所见,最后一个数组是空的[User]数组,那么如何在不使用foreach / if块的情况下排除这个空数组(我的意思是整个[2]数组)?我知道使用bindModel也可以做到这一切,但这不是我的问题;)那么,怎么样?
答案 0 :(得分:2)
将条件放在“包含”键中将过滤特定模型中的结果。
检索正确的数据 我之前回答了一个与here非常相似的问题。您只需要用自己的模型替换那里提到的模型。如果您无法理解答案,请告诉我们。
您当前模型结构的提示 我注意到您的ProjectsUser模型有一个额外的字段“projects_users_role_id”。当您的连接模型很复杂(不仅仅是id,model1_id,model2_id)时,您需要通过模型本身来表示它。它通常被称为hasMany Through关系。
User hasMany ProjectsUser
Project hasMany ProjectsUser
ProjectsUserRole hasMany ProjectsUser
ProjectsUser belongsTo User
ProjectsUser belongsTo Project
ProjectsUser belongsTo ProjectsUserRole
您还可以将“ProjectsUser”重命名为更好的“ProjectMembership”。