#php #laravel #for-loop
Вопрос:
Я получаю услуги из нашей базы данных с помощью кода
'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');
}
Ответ №1:
Вы можете попробовать следующий способ:
@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
Комментарии:
1. Спасибо, но мне нужна подробная информация о подкатегории, а не только название
2. Итак, где же данные, которые вы не хотите повторять?
Ответ №2:
Получайте только уникальные идентификаторы или уникальное имя. Может отличаться в зависимости от вашей базы данных.
'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);
Также можно использовать следующие методы
->distinct('name')->get();
->distinct()->get(['name']);
Для получения дополнительной информации проверьте Агрегирование Связанных Моделей
Комментарии:
1. Спасибо. Я перепробовал все коды, но в результате получились дубликаты подкатегорий
2. не могли бы вы, пожалуйста, обновить вопрос со структурой и отношениями таблиц БД