栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

CakePHP使用JOIN查找方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CakePHP使用JOIN查找方法

您可以通过两种主要方法来执行此操作。其中一种是标准的CakePHP方法,另一种是使用自定义联接。

值得指出的是,此建议适用于CakePHP 2.x,而不是3.x。

CakePHP方式

您将与用户模型和消息模型创建关系,并使用可包含的行为:

class User extends AppModel {    public $actsAs = array('Containable');    public $hasMany = array('Message');}class Message extends AppModel {    public $actsAs = array('Containable');    public $belongsTo = array('User');}

您需要将

messages.from
列更改为,
messages.user_id
以便cake可以自动为您关联记录。

然后,您可以从消息控制器执行此操作:

$this->Message->find('all', array(    'contain' => array('User')    'conditions' => array(        'Message.to' => 4    ),    'order' => 'Message.datetime DESC'));

(其他)CakePHP方式

我建议使用第一种方法,因为它将节省大量时间和工作。第一种方法还为建立关系奠定了基础,该关系可以用于除您现在需要的其他多个查找调用和条件。但是,cakePHP确实支持用于定义自己的联接的语法。可以这样进行

MessagesController

$this->Message->find('all', array(    'joins' => array(        array( 'table' => 'users', 'alias' => 'UserJoin', 'type' => 'INNER', 'conditions' => array(     'UserJoin.id = Message.from' )        )    ),    'conditions' => array(        'Message.to' => 4    ),    'fields' => array('UserJoin.*', 'Message.*'),    'order' => 'Message.datetime DESC'));

注意,

messages.from
在此示例中,我将字段名称保留为与当前表相同的名称。

对同一模型使用两个关系

这是将两个关系应用于同一模型的第一个示例:

class User extends AppModel {    public $actsAs = array('Containable');    public $hasMany = array(        'MessagesSent' => array( 'className'  => 'Message', 'foreignKey' => 'from'         )    );    public $belongsTo = array(        'MessagesReceived' => array( 'className'  => 'Message', 'foreignKey' => 'to'         )    );}class Message extends AppModel {    public $actsAs = array('Containable');    public $belongsTo = array(        'UserFrom' => array( 'className'  => 'User', 'foreignKey' => 'from'        )    );    public $hasMany = array(        'UserTo' => array( 'className'  => 'User', 'foreignKey' => 'to'        )    );}

现在,您可以像这样进行查找呼叫:

$this->Message->find('all', array(    'contain' => array('UserFrom')    'conditions' => array(        'Message.to' => 4    ),    'order' => 'Message.datetime DESC'));


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/465871.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号