При использовании простого оператора для создания записи в БД:
Post::create(['title_TYPO_HERE' => 'My awesome title']);
На самом деле это создаст публикацию с title = null (предположим, что она обнуляемая)
Как сделать так, чтобы Eloquent в таких случаях не сработал, чтобы не допустить опечаток?
Спасибо @krisgjika, я знаю об этом, но, по моему мнению, было бы разумно потерпеть неудачу в случае опечаток. Поэтому мне интересно, можно ли как-то настроить модель Eloquent для этого.
Хм, мне интересно, возможно ли это, но я подозреваю, что большинство вариантов использования/подходов предотвратят проблемы с опечатками в именах столбцов. Обычно вы создаете форму для каждого столбца на внешнем интерфейсе, создаете запрос, включая проверку этих полей формы на внутреннем интерфейсе, а затем вызываете Post::create($validatedInput), что к тому времени естественным образом отфильтрует ваши шансы на опечатку. Конечно, жесткое кодирование чего-то вроде Post::create(['column_name' => 'value']) допускает множество опечаток, но это нетипично. Примечание: что-то вроде DB::table('...')->insert(...), скорее всего, не получится из-за опечаток.






то, что вы ищете, похоже: (https://laravel.com/docs/11.x/eloquent#configuring-eloquent-strictness)
class AppServiceProvider
{
public function boot(): void
{
Model::preventSilentlyDiscardingAttributes(! $this->app->isProduction());
}
}
Отлично, именно то, что мне нужно, спасибо @krisgjika!
это не вызывает ошибку, поскольку этот атрибут никогда не отправляется в базу данных и вставка не завершается сбоем. Операции модели будут отфильтровывать атрибуты, не определенные в атрибуте
$fillable.