[英]Laravel 1-N relationship not working
我正在开始我的第一个Laravel项目。 我建立并测试了表之间的所有关系,它们看起来都很好,但是只有一个1-N关系。 我找不到错误,您能帮我吗?
表格:
User: *id *username
感觉:
*id *name *user (it points to User:id)
班级用户
<?php
class User extends Eloquent {
protected $table = 'User';
public function feelings() {
return $this->hasMany('Feeling', 'user');
}
}
课堂感觉
class Feeling extends Eloquent {
protected $table = 'Feeling';
public function user() {
return $this->belongsTo('User','user');
}
}
如果我执行:
$feeling = Feeling::find(1);
echo($feeling->user->username);
我收到一个错误“试图获取非对象的属性”。
如果我执行
$feeling = Feeling::find(1);
它打印感觉对象的Json数组,如果执行
$feeling = Feeling::find(1);
echo($feeling->user);
打印“ 1”。 因此,我正在获取数据库的用户ID,而不是用户对象。 我想改为获取用户对象。
非常感谢你。
一切都很好,但是您已经将user
用作本地密钥,这就是造成混乱的原因,因为当您调用$feeling->user
时,会调用魔术方法__get()
,该方法在Illuminate/Database/Eloquent
__get()
中可用,并且它可用; 如下所示:
public function __get($key)
{
return $this->getAttribute($key);
}
getAttribute()
方法在几个地方寻找关键字,然后依次检查Model
本身,然后查看关系数组,然后最后检查案例user
中的示例关键字是否作为Model
的方法存在,是Feeling
在你的情况,那么它得到的相关模型,并发现该键值。
因此,您的Feeling
有一个作为user
的字段,因此在进入相关模型之前,它只是在当前Model
的属性中找到该字段,因此它认为已请求了user
字段,而您获得了数字id
而不是相关模型实例。
解决方案非常简单,将相关字段名称( user
)更改为其他名称,最好是user_id
但是您可以随意使用任何名称,但要确保不会造成任何进一步的混乱。 因此,如果将其更改为user_id
则对两个模型都进行更改,例如:
public function user() {
return $this->belongsTo('User','user_id');
}
但是,如果您使用user_id
则可以从两个模型的Relationship方法中省略第二个参数,因此您可以编写:
// Feeling
return $this->belongsTo('User');
// User
return $this->hasMany('Feeling');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.