cakephp hasone和属于加入不工作

时间:2014-09-26 12:26:34

标签: php mysql cakephp pdo orm

我有两张桌子:

  • 用户包含(ID,姓名,电子邮件)id是主键。

  • users_details 包含(user_id,地址,城市,邮政编码)user_id是用户表的外键。

users.id=users_details.user_id

我在 User.php

中编写了这样的用户模型
class User extends AppModel {

public $name = 'User';
public $displayField = 'name';
    public $primaryKey = 'id';
    var $belongsTo = 'UsersDetail';
    public $hasone = array(
    'UsersDetail' => array(
        'className' => 'UsersDetail',           
        'conditions' => '',
        'fields' => '',
                    'foreignKey' => 'id',
        'order' => '',
                    'dependent' => true
      )
  );   
}

我在 UsersDetail.php

中编写了usersdetail模型
class UsersDetail extends AppModel {

public $name = 'UsersDetail';
public $displayField = 'name';        

    public $belongsTo = array( 'User' =>  
       array( 'className' => 'User','foreignKey' => 'user_id') );

    public $hasone = array(
    'User' => array(
        'className' => 'User',          
        'conditions' => '',
        'fields' => '',
                    'foreignKey' => 'id',
        'order' => '',
                    'dependent' => true
    ));
}

我想使用带条件的连接从表中获取数据。 users.id=users_details.user_id

2 个答案:

答案 0 :(得分:0)

你已经为每个模型关联声明了两个关系,当你应该只有一个关系时。

像这样: 在userDetail Model中:

public $hasMany = array(
        'User' => array(
            'className' => 'User',
            'foreignKey' => 'user_id'

        )
    );

因此,在用户模型中:

public $belongsTo = array(
        'UserDetail' => array(
            'className' => 'UserDetail',
            'foreignKey' => 'user_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
    );

查看documentation了解详情。

答案 1 :(得分:0)

  • 用户(id,name,email)id是主键。
  • users_details具有(user_id,address,city,postcode)user_id是用户表的外键。手段。

要记住:

  • 一对一关系 - hasOne - 用户表有一个 users_detail

  • 属于 - 用户详细信息表属于用户表。

因此,两个表之间的关系是hasone和belongssto。

在下面找到正确的代码。

  

用户模型:

public $hasOne = array('UsersDetail' => array(
                       'className' => 'UsersDetail',
                       'foreignKey' => 'user_id')
                       );
  

UsersDetail模型

public $belongsTo = array('User' => array(
                          'className' => 'Users',
                          'foreignKey' => 'id',
                          'conditions' => '',
                          'fields' => '',
                          'order' => '')
                          );

精确地提供连接。您可以添加条件,在集合中订购。

输出查询

SELECT `User`.`id`, `User`.`first_name`, `User`.`last_name`, `User`.`email`, `User`.`mobile`, `User`.`pswd`, `UsersDetail`.`user_id`, `UsersDetail`.`address`, `UsersDetail`.`city`, `UsersDetail`.`state`, `UsersDetail`.`postcode`, `UsersDetail`.`dob`, `UsersDetail`.`photo` FROM `cakedemo`.`users` AS `User` LEFT JOIN `cakedemo`.`users_details` AS `UsersDetail` ON (`UsersDetail`.`user_id` = `User`.`id`) WHERE 1 = 1

谢谢,