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

时间:2019-05-09 16:25:26

标签: php laravel laravel-5 laravel-5.8

我有三个模型:产品,类别,product_category。一个产品可能有很多类别,有些类别可能有一个父类别。您可以在下面找到相关关系。我可以使用1463循环显示所有类别,但我不想这样做。我只想显示类别,它必须是最新的。有没有办法只显示当前产品的父类别的最后一个类别?

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');
}

Category_product模式

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

4 个答案:

答案 0 :(得分:2)

您可以对这种关系使用查询生成器:

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

从最新到最旧的顺序排列,您可以获取第一条记录。

答案 1 :(得分:0)

您可以简单地使用

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

或者您也可以尝试

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

然后您可以使用

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



答案 2 :(得分:0)

您可以使用latest()方法

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

或者

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

答案 3 :(得分:0)

在模型上使用特定方法

您的类别定义将是这样,对吧?

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();

希望它会对您有所帮助。 祝你有美好的一天。