Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
命名约定和CakePHP中的连接_Php_Database Design_Cakephp - Fatal编程技术网

命名约定和CakePHP中的连接

命名约定和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

就在几天前,我发现了一个叫做“奇迹”的东西,所以我对它相当陌生。 我需要构建一个邮件应用程序,因此我按照惯例创建了:

数据库说明:

用户表

邮件表

我的问题是:

1) 根据约定,外键应称为相关表+“U id”。如果有两个外键与同一个表相关,我应该如何调用这些列。比如邮件表中的from和to

2) 我想在两个表之间做一个内部连接。 比如:

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