我有以下任务模型

class Task extends Eloquent {
    public function user()
    {
        return $this->belongsTo('User');
    }
}
.

我打电话时:

$task = Task::with('user')->first();
.

我得到以下预期结果:

{
    id      : 10,
    user_id : 20,
    user    : {
        id      : 20
    }
}
.

和以下期望查询日志:

select `tasks`.* from `tasks` limit 1;
select * from `users` where `users`.`id` in (20);
. 但是,当我以神奇的方式设置我的关系时,所属关系中断:

class Task extends Eloquent {
    public function __call($name, $arguments)
    {
        if ($name === 'user')
            return $this->belongsTo('User');

        return parent::__call($name, $arguments);
    }
}
.

我得到以下破坏结果:

{
    id      : 10,
    user_id : 20,
    user    : null // USER IS MISSING!
}
.

和以下破损查询日志:

select `tasks`.* from `tasks` limit 1;
select * from `users` where `users`.`id` in (0); // NOTE THE 0 INSTEAD OF 20
.

我没有任何错误。我已经尝试了同样的东西,但是这是完美的。

出于某种原因,“20”不会被传递给与所属关系。因此,我希望__call()射击一个新的查询实例,但我不明白为什么?

我已经记录了__call()被解雇,但除了'用户'方法外,它似乎并没有被解雇。所以我的知识不能成为问题。

有帮助吗?

解决方案

这可能是因为Laravel使用它在里面的方法的名称作为默认的外键。尝试:

return $this->belongsTo('User', 'user_id');
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top