php Laravel Eloquent -在关系表中查找用户

dsekswqp  于 2022-12-17  发布在  PHP
关注(0)|答案(1)|浏览(167)

我正在尝试获取用户从现在到下周之间的预订。如果存在预订,则用户将从可能的选择中删除。
我在User模型中创建了这个reservation()函数:

public function reservation(): BelongsTo
{
    return $this->belongsTo(Reservation::class, ['user_1_id', 'user_2_id', 'user_3_id', 'user_4_id'], 'id');
}

最后,我返回视图时,尝试获得如下预订:

$user = User::whereHas('reservation', function ($query) {
    $query->whereBetween('date', [Carbon::now(), Carbon::now()->addWeek()]);
})->first();

然后,当保留存在时,我想从用户集合中删除该用户,并在视图中返回可用用户的新集合。现在的问题是,我首先得到一个错误:str_contains(): Argument #1 ($haystack) must be of type string, array given第二个我如何能够从用户集合中删除找到的用户?

egmofgnx

egmofgnx1#

这个问题的答案是:
我必须有一个中间表我称之为:“reservation_user”,则reservation()函数需要替换为:

public function reservations(): BelongsToMany
    {
        return $this->belongsToMany(Reservation::class, 'reservation_user', 'user_id', 'reservation_id');
    }

然后获取从现在到下周没有预订的用户:

$users = User::all();

        $usersWithReservations = User::has('reservations')
            ->whereHas('reservations', function($query) {
                $query->whereBetween('date', [Carbon::now(), Carbon::now()->addWeek()]);
            })
            ->get();

        if ($usersWithReservations->count() > 0) {
            $users = $users->reject(function($value) use($usersWithReservations) {
                return $usersWithReservations->contains('id', $value->id);
            });
        }

此函数将返回从现在到下周没有预订的所有用户。

相关问题