我在编写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_usersuser_idchar(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/

10-11 22:44
查看更多