Laravel - 在每个集合中获取最新的模型属性

时间:2017-10-19 16:17:53

标签: php laravel laravel-5

我循环访问集合并访问模型中的属性以供集合项的用户使用。

$advancedBookingsQuery = Booking::query();
$advancedBookingsQuery = $advancedBookingsQuery->where('type', 2)
    ->with('staffMember.user');
$advancedBookings = $advancedBookingsQuery->get(['id', 'requested_booking_time', 'estimated_booking_time']);

foreach ($advancedBookings as $booking) {
    $barberQueueLength = $booking->staffMember->user->currentQueueLength;
    $booking->update(['estimated_booking_time' => Carbon::now()->addMinutes($barberQueueLength)]);
}

currentQueueLength方法运行一些查询以获得满足要求的总预订长度。

public function getCurrentQueueLengthAttribute()
{
    // Calc length of all bookings with an estimated booking time value
}

问题是currentQueueLength属性总是为集合中的每个项返回相同的值。

有没有办法让我可以在集合的每次迭代中重新调用属性 - >每个方法?它似乎只是在收集$ advancedBookings集合时使用该值。

2 个答案:

答案 0 :(得分:0)

我昨天遇到了类似的问题,而不是使用

$booking->staffMember->user->currentQueueLength;

尝试使用

$booking->staffMember()->first()->user()->first()->currentQueueLength;

另请尝试查看刷新方法:https://laravel.com/api/5.5/Illuminate/Database/Eloquent/Model.html#method_refresh 我没有亲自尝试过,因为第一个解决方案解决了我的问题

答案 1 :(得分:0)

Laravel Accessors & Mutators

更改

$booking->staffMember->user->currentQueueLength;

To(snake_case)

$booking->staffMember->user->current_queue_length;