为什么我不能急切地加载我的相关客户详细信息



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

以下是我的Queue.php模型:

class Queue extends Model
{
public function customer()
{
return $this->belongsTo('AppUser');
}
...

我的控制器是这样的:

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(模型(,您可以看到User_ID下存在一个ID,并且数据库中存在一个具有该ID的记录。

为什么customer属性为空?

可能是因为laravel本身映射不正确。对于您的关系,它将解决为customer_id,正如官方文件所说:

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

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

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

最新更新