按laravel中的关系数据分组

按laravel中的关系数据分组,laravel,eloquent,laravel-relations,Laravel,Eloquent,Laravel Relations,我正在获取产品及其关系。我已经这样做了: $data = $this->products->with('images')->with('colors')->where('slug', $slug)->first(); 在产品模型中,我写道: public function images(){ return $this->hasMany('App\Models\ProductImages', 'product_id'); } public functio

我正在获取产品及其关系。我已经这样做了:

$data = $this->products->with('images')->with('colors')->where('slug', $slug)->first();
产品
模型中,我写道:

public function images(){
  return $this->hasMany('App\Models\ProductImages', 'product_id');
}

public function colors(){
  return $this->hasMany('App\Models\ProductSizes', 'color_id');
}
我正在产品尺寸表中存储颜色id,所以现在当我执行
dd($data)
时。它给出了对象内部的5个数据,其中
大小\u id
不同,但
颜色\u id
相同。是否可以将颜色关系中的数据分组

我尝试在刀片服务器中使用
array\u unique
,但没有使用以下功能:

public function colorInfo(){
    return $this->belongsTo('App\Models\Color', 'color_id');
}
我想对
颜色
关系中的颜色id进行分组,以显示产品的可用颜色

按要求编码: 产品型号

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    protected $fillable = ['name','slug','sku','category_id','brand_id','video','status', 'specification', 'description','warranty', 'vendor_id'];

public function getRules(){
    $rules = [
        'name' => 'bail|required|string|unique:products,name',
        'slug' => 'bail|required|string|unique:products,slug',
        'sku' => 'bail|required|string|unique:products,sku',
        'specification' => 'bail|required|string',
        'description' => 'bail|required|string',
        'category_id' => 'required|exists:product_categories,id',
        'brand_id' => 'nullable|exists:brands,id',
        'vendor_id' => 'nullable|exists:vendors,id',
        'video' => 'nullable|string',
        'warranty' => 'nullable|string',
        'status' => 'nullable|in:active,inactive',
    ];
    if($rules != 'add'){
        $rules['name'] = "required|string";
        $rules['slug'] = "required|string";
        $rules['sku'] = "required|string";
    }
    return $rules;
}
public function category(){
    return $this->belongsTo('App\Models\ProductCategory');
}

public function brand(){
    return $this->belongsTo('App\Models\Brand');
}

public function VendorName(){
    return $this->belongsTo('App\Models\Vendor', 'vendor_id');
}

public function images(){
  return $this->hasMany('App\Models\ProductImages', 'product_id');
}

public function sizes(){
  return $this->hasMany('App\Models\ProductSize', 'product_id');
}

public function colors(){
    return $this->hasMany('App\Models\ProductSize', 'product_id');
}

public function finalCategory(){
    return $this->belongsTo('App\Models\SecondaryCategory', 'category_id');
}
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class ProductSize extends Model
{
    protected $fillable = ['product_id','size_id', 'selling_price', 'purchase_price', 'discount','stock', 'color_id', 'quantity','total_price'];

public function getRules(){
    $rules = [
        'product_id' => 'required|exists:products,id',
        'size_id' => 'required|exists:sizes,id',
        'color_id' => 'required|exists:colors,id',
        'selling_price' => 'required|string',
        'purchase_price' => 'required|string',
        'quantity' => 'required|string',
        'total_price' => 'required|string',
        'discount' => 'nullable|string',
        'stock' => 'required|string',
    ];
    return $rules;
}

public function colorInfo(){
    return $this->belongsTo('App\Models\Color', 'color_id');
}
}
试试这个

 $data = $this->products->with('images')->with('colors')->where('slug', $slug)->groupBy('product_sizes.color_id')->first();
首先得到产品

$data = $this->products->with(['images', 'colors'])->where('slug', $slug)->first();

以获得该产品的独特颜色

$unique_product_colors = $data->colors->unique('color_id');


unique('color\u id')
方法可以应用于集合实例,以获得一个新集合,其中所有项目都将具有唯一的
color\u id

,谢谢Aashish。但它给出了此错误语法错误或访问冲突:1055“jojayo.product_size.id”不在分组依据中(SQL:select*from
product_size
where
product_size
product_id
在(107)GROUP BY
color_id
中),您可以共享product_size、product、color及其属性表的模型吗?这将清楚地表明结构是怎样的。谢谢,我已经相应地更新了解决方案。希望能有帮助。如果有什么问题,请告诉我。