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
, UserDetail
。user_id
,UserDetail
。address
,UserDetail
。city
,UserDetail
。state
,UserDetail
。postcode
,UserDetail
。dob
,UserDetail
.photo
FROM cakedemo
.users
AS User
LEFT JOIN cakedemo
.users_details
AS UserDetail
ON (User
.user_id
user_id
.user_id
HER.@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 和所属加入不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Lighthouse Graphql HasOne 嵌套关系不起作用
CakePHP hasOne belongsTo 关系,编辑/添加相同动作