php - 如何在不执行一长串 "OR"条件的情况下找到模型的所有记录?

标签 php mysql cakephp associations has-and-belongs-to-many

我在编写返回我正在寻找的记录的 CakePHP find() 时遇到问题。

我的联想是这样的:

用户 ->(有很多)-> 好友 ,
用户 ->(有很多)-> 帖子

我正在尝试显示一个用户的所有 friend 最近发布的列表,换句话说,列出当前登录用户的 friend 创建的每个帖子。

我能想到的唯一方法是将所有用户的 friend 的 user_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
                    )
                )           
            )
        ));

我觉得这不是最好的做事方式,就好像该用户很受欢迎,这是很多 OR 条件。谁能提出更好的选择?

澄清一下,这是我的数据库的简化版本:

“用户”表
编号
用户名
等等

“ friend ”表
编号
用户编号
friend_id
等等

“帖子”表
编号
用户编号
等等

最佳答案

在回顾了你重写的内容之后,我想我明白你在做什么。您当前的结构将不起作用。 POSTS 中没有对 friend 的引用。因此,根据您发布的架构, friend 不能添加任何帖子。我认为您要做的是将 friend 称为其他用户之一。意思是,用户 FRIEND 实际上只是 USERS 表中的另一个 USER。这是一个自引用的 HABTM 关系。所以这是我的建议:

1- 首先,确保您在数据库中创建了 HABTM 表:

-- MySQL CREATE TABLE users_users ( user_id char(36) NOT NULL,
friend_id char(36) NOT NULL );

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- 使用脚手架插入一些记录、链接 friend 和添加帖子。 4- 将查看记录功能添加到用户 Controller :

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) 时,您的输出将显示所有记录(递归地),包括 friend 及其在返回的数据树中的帖子

我知道这是一篇很长的文章,但我认为它将为您尝试做的事情提供最佳解决方案。 CakePHP 的强大功能令人难以置信。杀死我们的是学习曲线。

编码愉快!

关于php - 如何在不执行一长串 "OR"条件的情况下找到模型的所有记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2402059/

相关文章:

mysql - 表迁移到数据库

mysql - JSP和MYSQL : how do I relay a SQL Exception

CakePHP 在应该插入 HasAndBelongsToMany 模型时正在更新

cakephp - 蛋糕3.x : List all models

php - 计算字符串中匹配的单词数

php - 连接到显示 mysqli_connect() 函数警告的数据库时出现问题

php - Laravel 5.1 - 测试多选框

python - 如何连接包含 "$"或 "@"等字符的密码?

html - CakePHP 隐藏_方法 POST

javascript - 如何验证复选框列表中仅选择了一个复选框