获取枢纽关系的最新项目
getting the latest item of the pivot relationship
我的主元关系如下:
public function users()
{
return $this->belongsToMany(User::class,'pet_owners','pet_id','owner_id');
}
现在在我的控制器中,我想获取这个枢轴 table 的最新项目,它按 created_at 字段排序。这是我现在得到它的方式:
$pets = Pet::with('users')->get();
return new PetResource($pets);
这里我想显示所有宠物,在数据透视表中为该宠物输入的最新用户 table
你可以这样使用,
$pets = Pet::whereHas('users', function($q){
$q->orderBy('id', 'DESC');
})->get();
return new PetResource($pets);
// return latest record of pivot table
不幸的是,使用 Eloquent 限制急切加载并不容易。 Github 仓库中有许多与此相关的问题。您可以阅读 this 主题以了解概览。
Laravel 的一位贡献者发布了一个包 staudenmeir/eloquent-eager-limit 以更轻松地限制急切加载。你可以安装它:
composer require staudenmeir/eloquent-eager-limit:"^1.0"
您需要将 \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
特征添加到您的 Pet
和 User
模型中。然后,您将能够在模型的 with
方法内的查询中使用 limit
方法:
$pets = Pet::with(['users' => function ($query) {
return $query->latest()->limit(1);
}])->get();
我的主元关系如下:
public function users()
{
return $this->belongsToMany(User::class,'pet_owners','pet_id','owner_id');
}
现在在我的控制器中,我想获取这个枢轴 table 的最新项目,它按 created_at 字段排序。这是我现在得到它的方式:
$pets = Pet::with('users')->get();
return new PetResource($pets);
这里我想显示所有宠物,在数据透视表中为该宠物输入的最新用户 table
你可以这样使用,
$pets = Pet::whereHas('users', function($q){
$q->orderBy('id', 'DESC');
})->get();
return new PetResource($pets);
// return latest record of pivot table
不幸的是,使用 Eloquent 限制急切加载并不容易。 Github 仓库中有许多与此相关的问题。您可以阅读 this 主题以了解概览。
Laravel 的一位贡献者发布了一个包 staudenmeir/eloquent-eager-limit 以更轻松地限制急切加载。你可以安装它:
composer require staudenmeir/eloquent-eager-limit:"^1.0"
您需要将 \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
特征添加到您的 Pet
和 User
模型中。然后,您将能够在模型的 with
方法内的查询中使用 limit
方法:
$pets = Pet::with(['users' => function ($query) {
return $query->latest()->limit(1);
}])->get();