【问题标题】:Prevent foreach loop from repeating -laravel防止 foreach 循环重复 -laravel
【发布时间】:2021-10-23 03:09:49
【问题描述】:

我通过代码从我们的数据库中获取服务

'services' =>  Service::with('seller.user', 'seller.level', 'subcategory')
            ->whereHas('seller', function ($query) {
                return   $query->where('status', 'active');
            })
            ->Where('tags', 'like', '%' . $this->tag . '%')
            ->withAvg('review', 'rating')
            ->withCount('review')
            ->paginate(20)

如何忽略循环中重复的子类别

 @foreach ($services as $service)
        $$service->subcategory->name
        @endforeach

我得到了很多重复的子类别

我需要子类别的详细信息而不仅仅是名称

关系

class Service extends Model
{
    public function subcategory()
    {
        return $this->belongsTo(Subcategory::class);
    }
}

class Subcategory extends Model
{
    public function service()
    {
        return $this->hasMany(Service::class);
    }
}

餐桌服务

Schema::create('services', function (Blueprint $table) {
        $table->id();
        $table->foreignId('seller_id')->constrained()->onDelete('cascade')->onUpdate('cascade');
        $table->foreignId('subcategory_id')->constrained()->onDelete('cascade')->onUpdate('cascade');
        $table->string('title')->nullable();
        $table->string('slug')->nullable();
        $table->float('price')->nullable();
        $table->json('tags')->nullable();
    }

表格子类别

  Schema::create('subcategories', function (Blueprint $table) {
        $table->id();
        $table->foreignId('category_id')->constrained()->onDelete('cascade')->onUpdate('cascade');
        $table->string('name');
    }

【问题讨论】:

    标签: php laravel for-loop


    【解决方案1】:

    仅获取唯一 ID 或唯一名称。可能与您的数据库不同。

    'services' =>  Service::with('seller.user', 'seller.level',
     'subcategory' => function($query) {
              $query->get()->unique('name')
          })
           ->whereHas('seller', function ($query) {
                return   $query->where('status', 'active');
            })
            ->Where('tags', 'like', '%' . $this->tag . '%')
            ->withAvg('review', 'rating')
            ->withCount('review')
            ->paginate(20);
    

    也可以使用以下方法

    1. ->distinct('name')->get();

    2. ->distinct()->get(['name']);

    更多请查看Aggregating Related Models

    【讨论】:

    • 谢谢。我尝试了所有代码,但重复子类别的结果
    • 能否请您用数据库表结构和关系更新问题
    【解决方案2】:

    您可以尝试以下方法:

    @php
    $subcategories = array();
    foreach ($services as $key => $service) {
        array_push($subcategories, $service->subcategory->name);
    }
    $subcategories = array_unique($subcategories);
    @endphp
    @foreach ($subcategories as $key => $subcategory)
        {{ $subcategory }}
    @endforeach
    

    【讨论】:

    • 谢谢,但我需要子类别的详细信息,而不仅仅是名称
    • 那么你不想重复的数据在哪里?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 2021-12-26
    • 2019-10-29
    相关资源
    最近更新 更多