【问题标题】:Laravel merge RelationshipLaravel 合并关系
【发布时间】:2019-12-15 18:10:06
【问题描述】:

我有 2 张桌子 bookingseventDates

bookings 表有 2 个字段 checkIndatecheckOutDate 指向 eventDates 表。

我设置了以下关系

public function eventCheckInDate() {
    return $this->belongsTo( 'EventDate', 'checkInDate' );
}
public function eventCheckOutDate() {
    return $this->belongsTo( 'EventDate', 'checkOutDate' );
}

如何结合这些关系,让 eloquent 只运行单个查询并获取数据?

现在发生的情况是即使 checkInDatecheckOutDate 仍然相同,它也会运行 2 个查询。

谢谢

【问题讨论】:

  • 但是为什么你要为同一条记录创建两种方法,我的意思是它没有得到同一行吗?如果我们删除一种方法怎么办?
  • @MahendraPratap 因为预订时checkInDatecheckOutDate 可能相同或不同。

标签: laravel eloquent laravel-5.8


【解决方案1】:

据我了解,您需要类似的东西。创建另一种方法来合并两个关系。

public function getEventsInOutDateAttribute($value)
{
    $eventCheckInDate = $this->eventCheckInDate;
    $eventCheckOutDate = $this->eventCheckOutDate;

    // Merge collections and return single collection.
    return $eventCheckInDate->merge($eventCheckOutDate);
}

【讨论】:

  • 这是属性而不是关系,所以如果我在同一页面上显示 10 行,这仍然会运行重复查询。
  • 您可以使用 load() 来运行您想要的任何关系,如果找到任何匹配项,则在查询后加载运行。比如 Bookings::load('eventCheckInDate')->get();,只有 Bookings::all();不会运行关系。
  • 这会引发Undefined method: merge() 错误。 eventCheckInDate 返回 belongsTo 关系。我想这就是原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
  • 2020-03-05
  • 2020-06-02
相关资源
最近更新 更多