Lew*_*wis 3 php laravel eloquent
问题
我不能让 Laravel 忽略在 Eloquent 的create方法中或为数据库播种时不存在于数据库中的字段。在下面的示例中,事件表中不存在“天”字段。但是,我需要它出现在数组中,以便我可以在 EventObserver.php 中使用它,以便在创建 $event 的同时创建 $event->day。我意识到我可以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();
}
Run Code Online (Sandbox Code Playgroud)
在我的 Event Factory 中,我有这个;
//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
]
];
});
Run Code Online (Sandbox Code Playgroud)
概括
如何day: []在创建事件时让 Laravel 忽略该属性,以便我仍然可以在观察者中使用它?
Eloquent 不存储表中存在哪些列。因此,它会尝试插入您传递给 create 方法的任何字段,只要它们没有被批量分配保护阻止。
避免这种情况的一种方法是在模型的$fillable属性中显式声明所有字段。模型上的质量分配保护将过滤掉 $fillable 中不存在的所有字段。这将阻止您的观察者正常工作,因为模型属性中不存在“day”。
在您的情况下,您永远不应该在 EventFactory 中创建“天”索引。为什么要为模型创建工厂中不存在的索引?有更好的方法来创建相关数据,例如为相关模型创建和使用不同的工厂。
您还可以创建自己的方法来创建和填充模型和相关数据。我不会尝试覆盖默认的创建功能。
| 归档时间: |
|
| 查看次数: |
3287 次 |
| 最近记录: |