我有三个模型:产品、类别、产品类别。一个产品可能有很多类别,有些类别可能有一个父类别。您可以在下面找到相关关系。我可以用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();
3 回答
森栏
TA贡献1810条经验 获得超5个赞
您可以在关系上使用查询构建器,如下所示:
$product->categories->orderBy('id', 'desc')->first();
这将从最近到最旧排序,您可以只获取第一条记录。
倚天杖
TA贡献1828条经验 获得超3个赞
在您的模型上使用特定方法
你的类别定义应该是这样的,对吧?
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();
希望它会帮助你。祝你有美好的一天。
富国沪深
TA贡献1790条经验 获得超9个赞
你可以使用latest()
方法
$product->categories->latest()->first();
或者,
$product->categories->orderBy('id', 'desc')->first();
- 3 回答
- 0 关注
- 174 浏览
添加回答
举报
0/150
提交
取消