Laravel 为什么我不能加载相关的客户详细信息?

Laravel 为什么我不能加载相关的客户详细信息?,laravel,eloquent,Laravel,Eloquent,我在我的Laravel应用程序中创建了一个方法来获取我的队列模型及其相关的用户模型 下面是我的Queue.php模型的样子: class Queue extends Model { public function customer() { return $this->belongsTo('App\User'); } ... public function showQueue(Request $request) {

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

下面是我的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();
...
以下是我的控制器的外观:

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
    }
]
customer属性为空,但是customer实际上只是一个用户(模型),您可以看到User_ID下存在一个ID,并且数据库中存在一个具有该ID的记录


为什么
customer
属性为空?

可能是因为laravel本身映射不正确。对于您的关系,它将解析为
customer\u id
,如官方文件所述:

Eloquent通过检查relationship方法的名称并用_id作为方法名称的后缀来确定默认外键名称

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

返回$this->belongsTo('App\User','User\u id');

可能是因为laravel本身映射不正确。对于您的关系,它将解析为
customer\u id
,如官方文件所述:

Eloquent通过检查relationship方法的名称并用_id作为方法名称的后缀来确定默认外键名称

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

返回$this->belongsTo('App\User','User\u id');

你确定用户#2没有被软删除吗?我刚检查过,用户在那里。我没有启用软删除。你确定用户#2没有被软删除吗?我刚检查过,用户在那里。我没有启用软删除。我的用户模型使用
id
,因此标准
belongsTo
应该可以工作,而不必手动定义列。但是在这种情况下,外键不在用户实体上指定列键,而是在队列实体上指定列键,并且队列关系的函数名为customer,因此,它将在队列实体字段中搜索名为
customer\u id
(相反,您有名为
user\u id
)的字段。我很惊讶,我已经完成了您的建议,并且工作正常。让我感到困惑的是,在我的应用程序的其他领域,我有一个刀片模板,我在其中执行
Queue::find(X)->customer()->名称
,无需上述更改即可正常工作。我的用户模型使用
id
,因此标准
belongsTo
应该可以工作,而无需手动定义列。但在这种情况下,外键不在用户实体上指定列键,而是在队列实体上指定列键,队列关系的函数名是customer,因此它将在队列实体字段中搜索名为
customer\u id
(相反,您有名为
user\u id
)的字段。我很惊讶,我已经完成了您的建议及其工作。让我感到困惑的是,在我的应用程序的其他区域,我有一个刀片模板,我在其中执行
Queue::find(X)->customer()->name
,并且在没有上述更改的情况下,它可以正常工作。