我在编写cakephp find()返回我要查找的记录时遇到问题。
我的联想是这样的:
用户->(有很多)朋友,
用户->(有许多)->帖子
我试图显示一个列表,列出所有用户的朋友最近的帖子,换句话说,列出由当前登录用户的朋友创建的所有帖子。
我能想到的唯一方法是将所有用户朋友的用户id放入一个大数组中,然后循环遍历每个用户id,这样find()调用看起来像:
$posts = $this->Post->find('all',array(
'conditions' => array(
'Post.user_id' => array(
'OR' => array(
$user_id_array[0],$user_id_array[1],$user_id_array[2] # .. etc
)
)
)
));
我得到的印象是,这不是最好的方式做的事情,似乎该用户是受欢迎的,这是很多或条件。有人能提出更好的选择吗?
为了澄清,这里是我的数据库的简化版本:
“用户”表
身份证件
用户名
等
“朋友”桌
身份证件
用户ID
朋友身份证
等
“员额”表
身份证件
用户ID
等
最佳答案
在回顾了你重写的内容之后,我想我明白你在做什么。你现在的结构不起作用。在帖子中没有提到朋友。因此,根据您发布的架构,朋友无法添加任何帖子。我认为你要做的是把一个朋友作为其他用户之一。也就是说,用户朋友实际上只是用户表中的另一个用户。这是一种自我参照的habtm关系。所以我建议:
1-首先,确保在数据库中创建了habtm表:
--mysql create tableusers_users
(user_id
char(36)不为空,friend_id
字符(36)不为空;
2-在用户模型中建立关系。
var $hasAndBelongsToMany = array(
'friend' => array('className' => 'User',
'joinTable' => 'users_users',
'foreignKey' => 'user_id',
'associationForeignKey' => 'friend_id',
'unique' => true,
),
);
var $hasMany = array(
'Post' => array(
'className' => 'Post',
'foreignKey' => 'user_id'
),
);
3-使用脚手架插入一些记录,链接朋友和添加帖子。
4-向用户控制器添加查看记录功能:
function get_user($id)
{
$posts = $this->User->find('first', array(
'conditions' => array('User.id' => $id),
'recursive' => '2'
));
pr($posts);
}
5-现在您可以使用以下命令使用递归查询用户表以拉取记录:
http://test/users/get_user/USER_ID
6-当您pr($posts)时,您的输出将在返回的数据树中显示所有记录(递归地),包括朋友和他们的帖子。
我知道这是一个很长的职位,但我认为这将为你的努力提供最好的解决方案。Cakephp的威力令人难以置信。是学习曲线扼杀了我们。
快乐编码!
关于php - 如何在不执行长“OR”条件列表的情况下查找模型的所有记录?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2402059/