我在通过关系检索数据时遇到问题。
我的数据库结构(简化(:
orders:
id
user_id
product_id
order_items:
order_id
product_id
我需要使用关系,所有订单以及数组中的项目。
订单型号:
public function items()
{
return $this->hasMany(OrderItem::class, 'order_id', 'id');
}
测试控制器:
public function test()
{
return Order::with('items')->get();
}
访问test((时得到的结果:
[
{
"id": "d7baaae9-b925-4ff0-8bba-13e8e88d429b",
"user_id": "fa2a5f73-379d-4ab7-9bc5-81cdbd47f3b0",
"subtotal": "0.00",
"discount": "0.00",
"coupon_code": "0",
"total": "0.00",
"paid": false,
"refunded": false,
"created_at": "2022-07-26T16:41:50.000000Z",
"updated_at": "2022-07-26T17:51:45.000000Z",
"items": [
]
}
]
";项目";数组不存在于订单表中,它是通过关系来的,但它为空。数据库中有一条记录将订单与order_items关联,当我进行测试时,OrderItem模型正在正确访问数据库。我不知道可能是什么问题。
[EDIT_01]:我刚刚发现问题出在我使用的id上,我使用类型Uuid(Ramsey \Uuid\Uuid\Uuid::uuid4(((作为表的键,不知怎么的,它不起作用,但当我使用传统id进行测试时,它起作用。帮帮我。
我有同样的问题,我的解决方案是添加
protected $keyType = 'string';
到具有字符串id(uuid(的表。希望能帮助
如果不在这里测试您的代码示例,希望您能找到一个解决方案,并且对我来说一切都很好,
public function items()
{
return $this->hasMany(OrderItem::class);
}
使用这个,应该会给你一个更好的结果
试着删除第三个参数,只使用这个:
return $this->hasMany(OrderItem::class, 'order_id');
这应该适用于您的数据库设置示例,确保您的数据库中确实有属于您正在调试的顺序的项。