【问题标题】:Laravel eloquent with more than 3 tablesLaravel 雄辩,超过 3 个表
【发布时间】: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,但我也无法解决。

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    我不能说我完全理解您的问题,但据我了解,您无法从 UserCountries Model 获得销售额,因为 sales 表上没有关系键。

    如果是这种情况,我强烈建议查看hasManyThrough,它将通过另一个模型检索关系。

    【讨论】:

      猜你喜欢
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 2017-04-14
      • 2016-05-23
      • 2017-03-22
      • 1970-01-01
      • 2015-07-30
      • 1970-01-01
      相关资源
      最近更新 更多