仅显示 Laravel 5.8 中最新的产品类别

我有三个模型:产品、类别、产品类别。一个产品可能有很多类别,有些类别可能有一个父类别。您可以在下面找到相关关系。我可以用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();


一只名叫tom的猫
浏览 176回答 3
3回答

森栏

您可以在关系上使用查询构建器,如下所示:$product->categories->orderBy('id', 'desc')->first();这将从最近到最旧排序,您可以只获取第一条记录。

倚天杖

在您的模型上使用特定方法你的类别定义应该是这样的,对吧?public function categories() {&nbsp; &nbsp; return $this->belongsToMany(Category::class);}所以,只需创建另一种方法来检索最新的。public function latestCategory() {&nbsp; &nbsp; return $this->categories()->latest();}如果您需要最旧的类别,则应用相同的方法。public function oldestCategory() {&nbsp; &nbsp; return $this->categories()->oldest();}仅使用类别关系定义如果您不打算创建新方法,也可以应用不同的方法:$this->categories()->latest();或者$this->categories()->oldest();希望它会帮助你。祝你有美好的一天。

富国沪深

你可以使用latest()方法$product->categories->latest()->first();或者,$product->categories->orderBy('id', 'desc')->first();
打开App,查看更多内容
随时随地看视频慕课网APP