получить один уникальный предмет из отношений laravel - PullRequest
1 голос
/ 16 марта 2020

У меня есть отношение 1 к n между продуктом и изображениями, а на изображениях у меня есть поле с именем color_id, которое имеет 1 к n с изображениями. Теперь я хочу назвать продукт с отношениями изображений, как показано ниже:

  $relation = Product::with('images')->where('id',$product->id)->get();
        dd($relation);

Теперь нам нужно получить 1 изображение от каждого color_id, например, если этот продукт имеет 3 images. с color_id из 1 и 4 изображениями с color_id из 2. я хочу получить 1 изображение из каждого цвета. и вот результат dd $relation в случае необходимости.

^ Illuminate\Database\Eloquent\Collection {#945 ▼
  #items: array:1 [▼
    0 => Webkul\Product\Models\Product {#912 ▼
      #fillable: array:4 [▶]
      #connection: "mysql"
      #table: null
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:7 [▶]
      #original: array:7 [▶]
      #changes: []
      #casts: []
      #dates: []
      #dateFormat: null
      #appends: []
      #dispatchesEvents: []
      #observables: []
      #relations: array:1 [▼
        "images" => Illuminate\Database\Eloquent\Collection {#968 ▼
          #items: array:3 [▼
            0 => Webkul\Product\Models\ProductImage {#967 ▼
              +timestamps: false
              #fillable: array:4 [▶]
              #connection: "mysql"
              #table: null
              #primaryKey: "id"
              #keyType: "int"
              +incrementing: true
              #with: []
              #withCount: []
              #perPage: 15
              +exists: true
              +wasRecentlyCreated: false
              #attributes: array:6 [▶]
              #original: array:6 [▼
                "id" => 17
                "type" => null
                "path" => "product/39/y0ueAFEgscD9ZsVFg7nT2WPNsU6vDyXWqLVONa8L.jpeg"
                "product_id" => 39
                "product_color_id" => 3
                "product_size_id" => null
              ]
              #changes: []
              #casts: []
              #dates: []
              #dateFormat: null
              #appends: []
              #dispatchesEvents: []
              #observables: []
              #relations: []
              #touches: []
              #hidden: []
              #visible: []
              #guarded: array:1 [▶]
            }
            1 => Webkul\Product\Models\ProductImage {#970 ▼
              +timestamps: false
              #fillable: array:4 [▶]
              #connection: "mysql"
              #table: null
              #primaryKey: "id"
              #keyType: "int"
              +incrementing: true
              #with: []
              #withCount: []
              #perPage: 15
              +exists: true
              +wasRecentlyCreated: false
              #attributes: array:6 [▶]
              #original: array:6 [▼
                "id" => 23
                "type" => null
                "path" => "product/39/M9JTVsy2BtNp8LuUQh7cp17S5jN1ifOZ1P9WZk3h.jpeg"
                "product_id" => 39
                "product_color_id" => 2
                "product_size_id" => null
              ]
              #changes: []
              #casts: []
              #dates: []
              #dateFormat: null
              #appends: []
              #dispatchesEvents: []
              #observables: []
              #relations: []
              #touches: []
              #hidden: []
              #visible: []
              #guarded: array:1 [▶]
            }
            2 => Webkul\Product\Models\ProductImage {#969 ▼
              +timestamps: false
              #fillable: array:4 [▶]
              #connection: "mysql"
              #table: null
              #primaryKey: "id"
              #keyType: "int"
              +incrementing: true
              #with: []
              #withCount: []
              #perPage: 15
              +exists: true
              +wasRecentlyCreated: false
              #attributes: array:6 [▶]
              #original: array:6 [▼
                "id" => 24
                "type" => null
                "path" => "product/39/STA9sGKjWHWDn0wkmnVRqZYdI2adLE5qaIn7vyFQ.jpeg"
                "product_id" => 39
                "product_color_id" => 1
                "product_size_id" => null
              ]
              #changes: []
              #casts: []
              #dates: []
              #dateFormat: null
              #appends: []
              #dispatchesEvents: []
              #observables: []
              #relations: []
              #touches: []
              #hidden: []
              #visible: []
              #guarded: array:1 [▶]
            }
          ]
        }
      ]
      #touches: []
      +timestamps: true
      #hidden: []
      #visible: []
      #guarded: array:1 [▶]
    }
  ]
}

1 Ответ

1 голос
/ 16 марта 2020

Попробуйте это

$relation =Product::with(array('images' => function($query) {
    $query->groupBy('product_color_id');
})->where('id',$product->id)->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...