Показать только последнюю категорию продукта в Laravel 5.8 - PullRequest
0 голосов
/ 09 мая 2019

У меня есть три модели: продукты, категория, категория продукта.Продукт может иметь много категорий, а некоторые категории могут иметь родителя.Вы можете найти соответствующие отношения ниже.Я мог бы показать все категории с помощью цикла foreach(), но я не хочу этого делать.Я хочу только показать категорию, и она должна быть последней.Есть ли способ показать только последнюю категорию родительской категории текущего продукта?

<div class="row">
    @foreach ($products as $product)
        @foreach ($product->categories as $cat)
            {{ $cat->title }}
        @endforeach
    @endforeach
</div>

Модель продукта

public function categories()
{
    return $this->belongsToMany(Category::class);
}

Категория модели

public function products()
{
    return $this->belongsToMany(Product::class);
}

public function subcategories()
{
    return $this->hasMany('\App\Category', 'parent_id');
}

public function parent()
{
    return $this->belongsTo('\App\Category', 'parent_id');
}

Схема категорий

$table->increments('id');
$table->string('title');
$table->integer('parent_id')->nullable();

Схема категории_продукта

$table->increments('id');
$table->integer('category_id')->unsigned();
$table->integer('product_id')->unsigned();

Ответы [ 4 ]

2 голосов
/ 09 мая 2019

Вы можете использовать построитель запросов для отношений следующим образом:

$product->categories->orderBy('id', 'desc')->first();

Это будет порядок от самых последних к самым старым, и вы можете просто взять первую запись.

0 голосов
/ 09 мая 2019

Использование определенных методов для вашей модели

Ваше определение категории будет примерно таким, верно?

public function categories() {
    return $this->belongsToMany(Category::class);
}

Итак, просто создайте другой метод для получения только самой последней версии.

public function latestCategory() {
    return $this->categories()->latest();
}

Если вам нужна самая старая категория, применяется тот же подход.

public function oldestCategory() {
    return $this->categories()->oldest();
}

Использование только определения отношений категорий

Вы также можете применить другой подход, если вы не собираетесь создавать новые методы:

$this->categories()->latest();

или

$this->categories()->oldest();

Надеюсь, это поможет вам. Хорошего дня.

0 голосов
/ 09 мая 2019

Вы можете использовать latest() метод

$product->categories->latest()->first();

Или

$product->categories->orderBy('id', 'desc')->first();

0 голосов
/ 09 мая 2019

Вы можете просто использовать

$product->categories()->orderBy('id', 'DESC')->first();

Или вы также можете попробовать

 public function categories()
    {
        return $this->belongsToMany(Category::class)->orderBy('id','DESC');
    }

Тогда вы можете использовать

$product->categories()->first();



Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...