Распространённой ошибкой считается пропуск оператора возврата return
при определении отношений.
Чтобы этого избежать, можно указать возвращаемый тип. Это также помогает при статическом анализе.
// До
public function user()
{
$this->belongsTo(User::class);
}
// После
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
via: @TheLaravelDev и Laravel Daily
Вы можете вызвать make()
вместо create()
, чтобы получить экземпляр без сохранения в базе данных.
// Создать пользователя без сохранения в БД
User::factory()->make();
// Создать пользователя с сохранением в БД
User::factory()->create();
Для редиректа на анкор по имени роута нужно к редиректу добавить метод withFragment()
.
//..
return redirect()->route('post.show', $post)->withFragment('comments');
//..
Допустим нужно создать демо-данные в базе данных для следующих моделей с отношениями: Заказчик → заказы → продукты → ингридиенты.
// DatabaseSeeder.php
//...
public functiob run()
{
Customer::factory(100)
->has(Order::factory(2)
->has(Product::factory(3)
->has(Ingridient::factory(5))
)
)
->create();
}
//...
Moshe Brodsky добавил в классы Str и Stringable метод take()
, который является синтаксическим сахаром для substr()
, когда необходимо начать с первого символа:
// До
str('abcdef')->substr(0, 2) // 'ab'
Str::substr('abcdef', 0, 2); // 'ab'
// После
str('abcdef')->take(2) // 'ab'
Str::take('abcdef', 2); // 'ab'
Ещё один возможность применения — начать отсчёт от конца строки:
str('Lineharo WebDev')->take(8); // Lineharo
str('Lineharo WebDev')->take(-6); // WebDev
В Eloquent можно объединить whereHas()
и orDoesntHave()
в одном предложении.
User::whereHas('roles', function($query) {
$query->where('id', 1);
})
->orDoesntHave('roles')
->get();
Этот пример читается почти как правильное предложение на английском.