Laravel — игнорирование полей, которые не существуют при использовании model :: create ()

Эта проблема

Я не могу заставить Laravel игнорировать поля, которые не существуют в базе данных, когда они присутствуют в Eloquent create метод или при заполнении базы данных. В приведенном ниже примере поле «день» не существует в таблице событий. Однако мне нужно, чтобы он присутствовал в массиве, чтобы я мог использовать его в EventObserver.php, чтобы создать $ event-> day одновременно с созданием $ event. Я понимаю, что могу создать Day на его собственной фабрике я просто хочу знать, возможно ли это или даже целесообразно.

Ошибка

Столбец не найден: 1054 Неизвестный столбец «день» в «списке полей»

Мой код

Я пытаюсь присоединить метод Observer к моей модели событий, которая прослушивает created метод, чтобы я мог создать новый объект для каждого отношения. В моем EventObserver у меня есть следующее;

public function created(Event $event)
{

//get all attributes
$data = $event->getAttributes();

# fill any related models
$event->day->fill($data['day']);

# save event
$event->push();
}

На моей фабрике событий у меня есть это;

//EventFactory.php
$factory->define(App\Event::class, function (Faker $faker) {
return [
"name"                        => "A Test Event",
"description"                 => $faker->paragraphs(3, true),
"event_start_date"            => today(),
"event_opening_date"          => today(),
"event_closing_date"          => tomorrow(),
"user_id"                     => 1,
"banner_id"                   => 1,
"gallery_id"                  => 1,
"related_event_id"            => 1,
"status"                      => "published",
"purchase_limit"              => 1000,
"limit_remaining"             => 1000,
"delivery_method"             => "collection",
"merchandise_delivery_method" => "collection",
"day"                         => [
"event_id"        => 1,
"name"            => "Created with observer",
"date"            => today(),
"ticket_limit"    => 1000,
"limit_remaining" => 1000
]
];
});

Резюме

Как я могу заставить Laravel игнорировать day: [] свойство при создании события, чтобы я мог использовать его в обозревателе?

0

Решение

Eloquent не хранит какие столбцы существуют в таблице. Поэтому он будет пытаться вставить любые поля, которые вы передадите, в метод create, если они не заблокированы защитой от массовых назначений.

Одним из способов избежать этого является явное объявление всех полей в $ заполняемых недвижимость по вашей модели. Защита массовых назначений в модели отфильтрует все поля, которые не существуют в $ fillable. Это помешает вашему наблюдателю работать должным образом, так как «день» не будет присутствовать в атрибутах модели.

В вашем случае вы никогда не должны создавать индекс ‘day’ в вашей EventFactory. Зачем вам создавать индекс, который не существует на фабрике для модели? Существуют гораздо лучшие способы создания связанных данных, например создание и использование другой фабрики для связанных моделей.

Вы также можете создавать свои собственные методы для создания и заполнения модели и связанных данных. Я бы не стал переопределять функциональность создания по умолчанию.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector