命名约定和CakePHP中的连接
就在几天前,我发现了一个叫做“奇迹”的东西,所以我对它相当陌生。 我需要构建一个邮件应用程序,因此我按照惯例创建了: 数据库说明: 用户表 邮件表 我的问题是: 1) 根据约定,外键应称为相关表+“U id”。如果有两个外键与同一个表相关,我应该如何调用这些列。比如邮件表中的from和to 2) 我想在两个表之间做一个内部连接。 比如:命名约定和CakePHP中的连接,php,database-design,cakephp,Php,Database Design,Cakephp,就在几天前,我发现了一个叫做“奇迹”的东西,所以我对它相当陌生。 我需要构建一个邮件应用程序,因此我按照惯例创建了: 数据库说明: 用户表 邮件表 我的问题是: 1) 根据约定,外键应称为相关表+“U id”。如果有两个外键与同一个表相关,我应该如何调用这些列。比如邮件表中的from和to 2) 我想在两个表之间做一个内部连接。 比如: SELECT user_id, mail_id FROM users INNER JOIN mails ON users.user_id =mails.to
SELECT user_id, mail_id
FROM users
INNER JOIN mails
ON users.user_id =mails.to AND mails.opened=false.
但我不知道怎么做 我自己不是专家,但CakePHP网站上的以下信息将进一步帮助您:
当需要对同一个表建立两个关系时,需要覆盖默认约定。在您的示例中,我将生成两个外键。一个名为发送者\u id和一个名为接收者\u id。然后,您可以将它们加入模型中,如下所示:
<?php
class Mail extends AppModel {
//The Associations below have been created with all possible keys, those that are not needed can be removed
var $belongsTo = array(
'UserSender' => array(
'className' => 'User',
'foreignKey' => 'sender_id',
'conditions' => '',
'fields' => '',
'order' => ''
),
'UserRecipient' => array(
'className' => 'User',
'foreignKey' => 'recipient_id',
'conditions' => '',
'fields' => '',
'order' => ''
),
);
}
?>
然后,要执行您的条件,您可以这样引用它们:
<?php
$this->Mail->find(array('conditions'=>array('Mail.opened'=>false)));
?>
…要对发送方和接收方进行筛选,您的条件如下所示:
<?php
$this->Mail->find(array('conditions'=>array('UserSender.some_field'=>$someValue,
'UserRecipient.some_field'=>$someValue)));
?>
您好,谢谢您的回复。我看过教程,在他们的示例中,他们编写了$this->Recipe->find()调用的示例结果。但我对Recipe->find()中所写的内容一无所知,那个么您可能也尝试过conplex find()。如果失败,您可以使用$this->Recipe->query($sqlStatement)。Recipe::find()函数是从父类继承的,因此您不必编写它。这是为你写的。如果您指的是传递给函数的参数,那么这些参数在手册中有很好的文档记录。我建议您完成Cake教程,从开始到结束,这将帮助您解决这些基本问题。在约定主题上,您应该简单地命名主键id
,而不是user\u id
和mail\u id
)