Почему Eloquent не выдает ошибку при опечатке в имени столбца?

При использовании простого оператора для создания записи в БД:

Post::create(['title_TYPO_HERE' => 'My awesome title']);

На самом деле это создаст публикацию с title = null (предположим, что она обнуляемая)

Как сделать так, чтобы Eloquent в таких случаях не сработал, чтобы не допустить опечаток?

это не вызывает ошибку, поскольку этот атрибут никогда не отправляется в базу данных и вставка не завершается сбоем. Операции модели будут отфильтровывать атрибуты, не определенные в атрибуте $fillable.

kris gjika 22.08.2024 14:25

Спасибо @krisgjika, я знаю об этом, но, по моему мнению, было бы разумно потерпеть неудачу в случае опечаток. Поэтому мне интересно, можно ли как-то настроить модель Eloquent для этого.

Limon Monte 22.08.2024 14:51
laravel.com/docs/11.x/eloquent#configuring-eloquent-strictne‌​ss должен вам помочь. Вы можете настроить модель на выдачу исключения для незаполняемых атрибутов.
aynber 22.08.2024 14:59

Хм, мне интересно, возможно ли это, но я подозреваю, что большинство вариантов использования/подходов предотвратят проблемы с опечатками в именах столбцов. Обычно вы создаете форму для каждого столбца на внешнем интерфейсе, создаете запрос, включая проверку этих полей формы на внутреннем интерфейсе, а затем вызываете Post::create($validatedInput), что к тому времени естественным образом отфильтрует ваши шансы на опечатку. Конечно, жесткое кодирование чего-то вроде Post::create(['column_name' => 'value']) допускает множество опечаток, но это нетипично. Примечание: что-то вроде DB::table('...')->insert(...), скорее всего, не получится из-за опечаток.

Tim Lewis 22.08.2024 14:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
2
4
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

то, что вы ищете, похоже: (https://laravel.com/docs/11.x/eloquent#configuring-eloquent-strictness)

class AppServiceProvider
{
  public function boot(): void
  {
    Model::preventSilentlyDiscardingAttributes(! $this->app->isProduction());
  }
}

Отлично, именно то, что мне нужно, спасибо @krisgjika!

Limon Monte 22.08.2024 16:49

Другие вопросы по теме