我有三个模型:产品,类别,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();
答案 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();
希望它会对您有所帮助。 祝你有美好的一天。