Book::select('book.*')
->where([
['book.country', '=', $country->id],
['book.city', '=', 0],
['book.approve', '=', 1],
])
->when($user, function($query, $user)
{
$query->leftJoin('favorite', function($query) use($user){
$query->whereColumn('book.id', 'favorite.radio_id')->where('favorite.user_id', '=', $user->id);
})->addSelect('favorite.id as favorite_checked');
})
->paginate(50);
Начиная с PHP 8.0.0, параметры конструктора можно использовать для задания соответствующих свойств объекта.
Если декларация аргумента конструктора включает модификатор видимости, PHP интерпретирует его одновременно и как аргумент конструктора, и как свойство объекта и автоматически присвоит свойству значение, переданное в конструктор. При этом, если не предполагается какой-либо дополнительной логики, тело конструктора можно оставить пустым. Код конструктора выполнится после того, как все аргументы присвоятся всем соответствующим свойствам.