Php 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

我要开始我的第一个Laravel项目。我设置并测试了表之间的所有关系,它们看起来都很好,但只有一个1-N关系。我找不到错误,你能帮我吗?

表:

用户:
*身份证
*用户名

感觉:

*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');

对它成功了,我只需重命名数据库字段。非常感谢你的帮助!