Php Laravel 1-N关系不起作用
我要开始我的第一个Laravel项目。我设置并测试了表之间的所有关系,它们看起来都很好,但只有一个1-N关系。我找不到错误,你能帮我吗?Php Laravel 1-N关系不起作用,php,laravel,laravel-4,eloquent,Php,Laravel,Laravel 4,Eloquent,我要开始我的第一个Laravel项目。我设置并测试了表之间的所有关系,它们看起来都很好,但只有一个1-N关系。我找不到错误,你能帮我吗? 表: 用户: *身份证 *用户名 感觉: *id *名字 *用户(它指向用户:id) 类用户 <?php class User extends Eloquent { protected $table = 'User'; public function feelings() { return $this->has
表:
用户:
*身份证
*用户名
感觉:
*id
*名字
*用户(它指向用户: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);
$feeling = Feeling::find(1);
echo($feeling->user);
它打印feeling对象的Json数组,如果我执行
$feeling = Feeling::find(1);
$feeling = Feeling::find(1);
echo($feeling->user);
它打印“1”。所以我得到的是数据库的用户ID,而不是用户对象。我想取而代之的是用户对象
非常感谢。问题:
一切都很好,但是您使用了user
作为本地密钥,这就是为什么会出现混乱的原因,因为当您调用$feeling->user
时,会调用神奇的方法\u get()
,该方法在照明/Database/Eloquent
中可用,并且它;如下所示:
public function __get($key)
{
return $this->getAttribute($key);
}
getAttribute()
方法在多个位置查找键,然后依次查找模型本身,然后查找关系数组,最后检查您案例中的examaple键user
是否作为方法存在于模型中,该模型在您案例中是感觉的,然后获取相关模型并找到键值
因此,您的感觉
有一个字段作为用户
,因此在它转到相关模型之前,它只会在当前模型
的属性中找到该字段,因此它认为,用户
字段已被请求,如果是相关模型实例,您将获得数字的id
解决方案:
解决方案非常简单,将相关字段名(user
)更改为其他名称,更好的是user\u id
,但您可以自由使用任何名称,但请确保不会造成任何进一步的混淆。因此,如果将其更改为user\u id
,则对这两种型号进行更改,例如:
public function user() {
return $this->belongsTo('User','user_id');
}
但是,如果使用user\u id
,则可以从两个模型的关系方法中省略第二个参数,因此可以编写:
// Feeling
return $this->belongsTo('User');
// User
return $this->hasMany('Feeling');
对它成功了,我只需重命名数据库字段。非常感谢你的帮助!