gpt4 book ai didi

php - 如何在不使用 `$this->Model->query()` 的情况下在 CakePHP 中编写复杂的查找查询?

转载 作者:太空宇宙 更新时间:2023-11-03 11:21:12 25 4
gpt4 key购买 nike

嘿,我希望有人有足够的 Cake PHP 经验来完成这项工作。

我正在做一些目前可以亲切地称为 Twitter 克隆的东西。基本上我有一个这样的设置。

用户有很多 friend 。这是与用户表的多对多关系。它存储在名为 friends_users 的链接表中,其中包含 user_id、friend_id 列。 Users 是一个包含 user_id 列的表。

然后我有一个名为 tips 的表,它与用户相关联。一个用户可以有很多提示。

我想找出一种在 Tip 模型上进行查找的方法,该模型返回我传入的用户 ID 拥有的所有提示以及该用户的任何 friend 拥有的任何提示。

此 SQL 查询完美运行 -

SELECT *
FROM `tips`
JOIN users ON users.id = tips.user_id
JOIN friends_users ON tips.user_id = friends_users.friend_id
WHERE (friends_users.user_id =2 or tips.user_id=2)
LIMIT 0 , 30

返回用户#2 的提示以及任何用户 2 的 friend 的提示。

现在我如何使用 $this->Tip->findxxxxx(user_id) 做同样的事情

我知道如果需要我可以使用 Tip->query 但我正在努力学习困难的方法。

最佳答案

如果您在查询结果中只需要一个提示列表,我很想在 2 个查询中执行此操作。第一个找到该用户及其 friend 的用户 ID 列表,第二个找到属于这些 ID 中的任何一个的提示。因此,在您的 Tip 模型中:

function findTipsByUserAndFriends($userId) {
//FriendsUser is automagically created by CakePHP "with" association
$conditions = array('FriendsUser.user_id'=>$userId);
$fields = 'FriendsUser.friend_id';
//get a list friend ids for the given user
$friendIds = $this->Tip->User->FriendsUser->find('list', compact('conditions', 'fields'));
//get list of all userIds for whom you want the tips
$userIds = array($userId) + $friendIds;
$conditions = array('Tip.user_id'=>$userIds);
$tips = $this->Tip->find('all', compact('conditions'));
return $tips;
}

请注意,您正在调用自动​​创建的“FriendsUser”模型上的第一个查找,CakePHP 使用该模型为您的 HABTM friends_users 表建模,因此您不需要创建它。

这是未经测试的,因此您可能需要调试其中的一些内容,但您明白了。

关于php - 如何在不使用 `$this->Model->query()` 的情况下在 CakePHP 中编写复杂的查找查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/196488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com