首页 > 解决方案 > 为什么我不能急切地加载我关联的客户详细信息?

问题描述

我在我的 Laravel 应用程序中创建了一个方法来获取我的Queue模型及其相关User模型。

这是我的 Queue.php 模型的样子:

class Queue extends Model
{

    public function customer()
    {
        return $this->belongsTo('App\User');
    }
...

这是我的控制器的样子:

    public function showQueue(Request $request)
    {
        $key = $request->session()->get('session_key');
        return $queue = Queue::where('session_id', $key)->with('customer')->get();
...

当我这样做时,这就是我的控制器返回的内容:

[
    {
    "id": 37,
    "user_id": 2,
    "queue_entry_time": "2020-08-09 02:17:07",
    "created_at": "2020-08-09T01:17:07.000000Z",
    "updated_at": "2020-08-09T01:17:07.000000Z",
    "session_id": "ctwr4oqn7v4808oow8sooggosc04wk0",
    "customer": null
    }
]

客户属性为空,但客户实际上只是一个用户(模型),可以看到user_id下存在一个ID,并且在数据库中有与该ID存在的记录。

为什么customer属性为空?

标签: laraveleloquent

解决方案


可能是因为它被 laravel 本身错误地映射了。对于您的关系,它将customer_id像官方文档所说的那样解决:

Eloquent 通过检查关系方法的名称并在方法名称后加上 _id 来确定默认的外键名称。

因此,您必须设置关系的第二个参数,该参数指定队列实体的外键名称。

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

推荐阅读