你好,
我需要使用CakePHP find
方法执行以下查询:
SELECT *
FROM `messages`
INNER JOIN users ON messages.from = users.id
WHERE messages.to = 4
ORDER BY messages.datetime DESC
基本上我有:
- 具有
Message
模型的messages
表格 - 具有
User
模型的users
表格
并且希望在一个查询中同时检索两个表中的信息。users.id
字段与messages.from
字段相同,因此这就是连接的对象。
我在我的MessagesController
中执行此操作,因此它需要如下所示:
$this->Message->find();
谢谢
3条答案
按热度按时间ndh0cuux1#
有两种主要的方法可以做到这一点。其中之一是标准的CakePHP方式,另一种是使用自定义连接。
值得指出的是,这个建议是针对CakePHP 2.x的,而不是3.x。
CakePHP之道
您将创建一个与用户模型和消息模型的关系,并使用可包含的行为:
您需要将
messages.from
列更改为messages.user_id
,以便cake可以自动为您关联记录。然后,您可以从消息控制器执行此操作:
(另一种)CakePHP方式
我推荐使用第一种方法,因为它可以保存大量的时间和工作。第一种方法还可以建立一个关系,除了现在需要的一个之外,它还可以用于任何数量的其他find调用和条件。但是,cakePHP确实支持定义自己的连接的语法。它可以像这样完成,从
MessagesController
:请注意,在本例中,我保留了与当前表相同的字段名
messages.from
。对同一模型使用两个关系
以下是如何使用同一模型的两个关系来执行第一个示例:
现在,您可以像这样执行find调用:
wswtfjt72#
其他示例,JOIN的自定义数据分页
控制器CakePHP 2.6中的代码是正确的:
OR示例2,非活动条件:
yacmzcpb3#
它会转到数组为空。