Laravel按日期获取以前的记录(优化)

安德列斯菲

我有一个带有字段的预订表:

  • 名称|
  • 来自| 约会时间
  • 至| 约会时间

我选择其中一些预订,并将其显示为列表。我还会检查以前的预订是否相隔不到30天。

为此,我会为每个预订查询上一个预订:

@if ($booking->previousBooking()) // Simplified version but you get the idea

底层代码:

public function previousBooking()
    {
        return Booking::where('from', '<', $this->from)
            ->orderByDesc('from')
            ->first();
    }

您可能已经猜到了:它为每个预订添加查询。

最好的方案是急于加载“以前的预订”(带有),以便可以像以下方式进行访问:

$booking->previous_booking->from

有没有办法做到这一点?

限制条件:

  • 我无法查询所有预订,请按“来自”的顺序进行订购,然后只获取上一个索引
Lex de Willigen

看看乔纳森·赖因克(Jonathan Reinink)的这篇文章您可以通过previous_booking_id在预订模型上模拟来应用他的解决方案然后添加previousBooking()关系并使用进行查询with('previousBooking')让我知道您是否需要任何帮助。

更新资料


将以下范围添加到您的预订模型中:

public function previousBooking()
{
    return $this->belongsTo(Booking::class);
}

public function scopeWithPreviousBooking($query)
{
    $query->addSelect(['previous_booking_id' => Booking::select('id')
        ->whereColumn('previous_booking.from', '<', 'bookings.to')
        ->orderByDesc('from')
        ->take(1)
    ])->with('previousBooking');
}

现在,您可以使用以下方法获取所有包含其先前预订ID的预订:

$bookings = Booking::withPreviousBooking()->get();

现在所有的预订都应该有一个previous_booking_id我们with('previousBooking')在范围的末尾添加,就像在查询预订的关系一样。Eloquent并不关心它是否previous_booking_id在数据库中,只要它在模型中可用(我们已经通过addSelect()方法完成)即可。

现在,您应该可以在视图中使用请求的解决方案:

$booking->previousBooking->from

注意:仅在应用范围后才能访问previousBooking关系。如果没有,previous_booking_id则不可用,因此该关系将为null。如果您始终想加载以前的预订,请考虑将其添加为全局范围但是,我建议仅在需要的地方应用范围。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从当前日期获取以前的记录?

来自分类Dev

根据以前的 ID 获取记录 - Laravel

来自分类Dev

无法按日期获取最近的记录

来自分类Dev

按日期和按 ID 分组获取表的最新记录

来自分类Dev

在Laravel 5.2中按范围获取记录

来自分类Dev

SQL-按日期按列返回以前的记录详细信息

来自分类Dev

按日期时间字段获取最新的MongoDB记录

来自分类Dev

如何按日期在SQL中获取特定月份的记录

来自分类Dev

按存在和不存在的日期获取记录

来自分类Dev

按日期获取表的所有先前记录MySQL

来自分类Dev

如何按日期查找月份以获取给定月份的记录

来自分类Dev

mysql按升序获取最新日期记录

来自分类Dev

无法按日期从数据库中获取记录

来自分类Dev

按今天日期和当前时间之前获取记录

来自分类Dev

按日期查找最后创建的记录Laravel 5

来自分类Dev

如何使用 Laravel 按日期对记录进行分组和计数?

来自分类Dev

按日期获取具有加入顺序的最新记录的记录

来自分类Dev

使用sqoop获取以前的日期

来自分类Dev

使用sqoop获取以前的日期

来自分类Dev

根据日期用以前的记录更新列

来自分类Dev

按日期获取价值

来自分类Dev

Laravel按日期分组

来自分类Dev

Laravel按日期分组

来自分类Dev

通过组SQL获取以前的记录

来自分类Dev

根据Postgresql中的条件获取以前的记录

来自分类Dev

获取按日期排序的Spring Data上的最后一条记录

来自分类Dev

每小时按日期时间获取具有最高价值的记录

来自分类Dev

查询DynamoDB表以按创建日期获取前100条记录的顺序

来自分类Dev

根据多个列按日期时间获取最后一条记录