获取枢纽关系的最新项目

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; 特征添加到您的 PetUser 模型中。然后,您将能够在模型的 with 方法内的查询中使用 limit 方法:

$pets = Pet::with(['users' => function ($query) {
   return $query->latest()->limit(1);
}])->get();