【发布时间】:2021-06-14 08:07:49
【问题描述】:
我对 Laravel Eloquent 关系有一些问题。 我试图一次获得 3 个以上的表,它基于用户、国家、产品和销售额,而真正的问题在于销售额。
此时,除了获得销售外,一切都正常进行,它正在为每个国家/地区获得特定产品的销售。所以这是我得到的当前响应:
[
{
"id":"479aa264-2d33-4f18-b59f-e388920069bc",
"user_id":"24a40f61-8ce9-4444-9b15-fb95c1eac24e",
"countries_id":"522173e2-14ce-4d44-b15e-be3be9b987d9",
"all_access":0,
"deleted_at":null,
"created_at":"2021-06-14T07:39:40.000000Z",
"updated_at":"2021-06-14T07:39:40.000000Z",
"country":{
"id":"522173e2-14ce-4d44-b15e-be3be9b987d9",
"name":"Lithuania",
"iso_alpha_2":"LT",
"iso_alpha_3":"LTU",
"native_name":"Lietuva",
"phone_code":370,
"capital":"Vilnius",
"continent":"Europe",
"languages":"{\"lit\":\"Lithuanian\"}",
"address_format":"{{recipient}} {{street}} {{postalcode}} {{city}} {{region}} {{country}}",
"flag":"https://cdn.countryflags.com/thumbs/lithuania/flag-400.png",
"time_zone":"[\"Europe\\/Vilnius\"]",
"locales":null,
"isActive":1,
"currency_id":"05f0951c-098a-48bc-8cd0-5daae248c236",
"created_at":"2021-05-21T07:44:21.000000Z",
"updated_at":"2021-05-21T07:49:18.000000Z",
"deleted_at":null
},
"products":[
{
"id":"83782cce-d512-4b29-8c14-ebf4c9eec050",
"user_id":"24a40f61-8ce9-4444-9b15-fb95c1eac24e",
"countries_id":"522173e2-14ce-4d44-b15e-be3be9b987d9",
"product_id":"ed198413-6551-48be-bf53-939dfb11a20a",
"deleted_at":null,
"created_at":"2021-06-14T07:39:40.000000Z",
"updated_at":"2021-06-14T07:39:40.000000Z",
"product":{
"id":"ed198413-6551-48be-bf53-939dfb11a20a",
"sku":"1011",
"slug":"product-1",
"type":"product",
"deleted_at":null,
"created_at":"2021-05-21T07:44:23.000000Z",
"updated_at":"2021-05-21T07:44:23.000000Z",
"sales":[
{
"id":"03e1d259-1a62-4a2a-889a-baa644214602",
"order_id":"9b0b6a57-a452-4663-9412-92aa1bb95a70",
"country_id":"f346faef-3614-4357-92d8-7c77047a0081",
"product_id":"ed198413-6551-48be-bf53-939dfb11a20a",
"package_id":null,
"package_info_id":"682678a2-9a10-4543-b497-834c8016e65d",
"qty":3,
"price_pcs":172.67,
"price":518,
"deleted_at":null,
"created_at":"2021-06-10T11:27:24.000000Z",
"updated_at":"2021-06-10T11:27:24.000000Z"
},
{
"id":"0a52afcf-1761-43cd-918e-b98c6ed617e7",
"order_id":"4264ad52-7d46-48ea-b1f0-91d55d36be3e",
"country_id":"d3e92cc0-91c0-478a-936a-8e06d4aecf66",
"product_id":"ed198413-6551-48be-bf53-939dfb11a20a",
"package_id":null,
"package_info_id":"dc47b8b4-6cdc-4497-9a57-10dfcc202ad0",
"qty":1,
"price_pcs":38.7,
"price":38.7,
"deleted_at":null,
"created_at":"2021-06-02T15:52:54.000000Z",
"updated_at":"2021-06-02T15:52:54.000000Z"
}
]
}
}
]
}
]
如您所见,获取用户、国家/地区信息和产品是最新的,但产品销售不是(不同国家/地区)。 这就是我在代码中所做的。
首先验证用户并获取统计关系和产品,如下所示:
$user = User::with('stats.products')->findOrFail(Auth::id());
这是用户的模型,它返回用户有权查看的国家,以及国家信息:
public function stats()
{
return $this->hasMany(UserCountries::class)->with(['country']);
}
在 UserCountries 我有关联产品,它获取特定产品的产品信息和销售:
public function products()
{
return $this->hasMany(Products::class, 'countries_id', 'countries_id')->where('user_id', Auth::id())->with(['product.sales']);
}
所以产品模型是基本的 hasOne 关系,因为它只返回产品信息,它看起来像:
public function product()
{
return $this->hasOne(ProductModel::class, 'id', 'product_id');
}
我已经定义了相同模型的销售额,如下所示:
public function sales()
{
return $this->hasMany(OrderModel::class, ['product_id', 'product_id']);
}
我可以看到问题出在哪里,我没有为销售关系传递国家/地区 ID,但是如何传递正确的国家/地区 ID?我尝试了几个选项,但似乎都没有按预期工作。
关于如何解决它的任何想法?
顺便说一句,我已经安装了\Awobaz\Compoships\Compoships,但我也无法解决。
【问题讨论】: