cakephp hasone 和所属加入不起作用

Posted

技术标签:

【中文标题】cakephp hasone 和所属加入不起作用【英文标题】:cakephp hasone and belongs join not working 【发布时间】:2014-09-26 12:26:33 【问题描述】:

我有两张桌子:

users 包含(id、name、email)id 是主键。

users_details 包含(user_id、address、city、postcode)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

【问题讨论】:

您需要为每个模型选择一个关系并为其命名。每个用户是否存在超过 1 个 UserDetail? 我是新手。你能解释一下怎么做吗? 【参考方案1】:

您已经为每个模型关联声明了两个关系,而您应该只有一个去往单向。

像这样: 在 userDetail 模型中:

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

        )
    );

因此,在用户模型中:

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

查看documentation了解更多详情。

【讨论】:

对不起老大,我无法得到结果。我得到的查询输出是。 "选择User.id, User.first_name, User.last_name, User.email, User.User,User,User,User, UserDetailuser_idUserDetailaddressUserDetailcityUserDetailstateUserDetailpostcodeUserDetaildobUserDetail.photo FROM cakedemo.users AS User LEFT JOIN cakedemo.users_details AS UserDetail ON (User.user_iduser_id.user_idHER.@7658 = 1"。它必须是 (User.id = UserDetail.user_id)【参考方案2】: 用户有(id、name、email)id是主键。 users_details has(user_id, address, city, postcode) user_id 是用户表的外键。方法。

要记住的一点:

一对一关系 - hasOne - 用户表有一个users_detail。 p>

belongto - userdetails 表 属于 User 表。

所以,两张表的关系是hasone和belongto。

在下面找到正确的代码。

用户模型:

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

谢谢,

【讨论】:

以上是关于cakephp hasone 和所属加入不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Cakephp 3.7 hasOne字段数据不保存

Laravel Lighthouse Graphql HasOne 嵌套关系不起作用

CakePHP hasOne belongsTo 关系,编辑/添加相同动作

HasOne 和 HasMany 用于同一张表 cakephp

带有连接表字段排序的 Cakephp 分页不起作用

CakePHP 和 HABTM 插入/保存不起作用