具有上一个值和下一个值的Laravel模型属性



如何获得具有上一个和下一个最大值的模型属性值?

假设我有一个user模型,其中有一列用于age。我现在想知道用户x的年龄,以及最近的上一个和下一个年龄值。

$age = User::find($id)

在您发布的代码中,$age当前是User实例或null,所以这并没有多大作用。

如果ageusers表上的一列,那么您可以执行以下操作:

$age = User::findOrFail($id)->age;
try {
return User::where('age', '<', $age)
->orderBy('age', 'DESC')
->firstOrFail()
->age;
} catch (ModelNotFoundException $mnfe) {
return null; // Or similar 
}
try {
return User::where('age', '>', $age)
->orderBy('age', 'ASC')
->firstOrFail()
->age;
} catch (ModelNotFoundException $mnfe) {
return null; // Or similar 
}

使用$age(让我们想象一下30(作为参考点:

  • 对于年轻人:

    • 查询年轻人('age' < 30(
    • 从29到0排序(DESC(
    • 找到第一个(如果没有,则失败(
    • 返回该用户的age
  • 对于老年人:

    • 查询年龄较大的人('age' > 30(
    • 将它们从30排序到∞(ASC(
    • 找到第一个(如果没有,则失败(
    • 返回该用户的age

旁注,此代码可以作为getPreviousAge($age)getNextAge($age)等函数进入控制器或模型。

最新更新