我有一个更新功能,可以从用户那里获取输入并将旧输入替换为新输入:
/**
* Update input values in $detail
*
* @param array $detail :validated input event data
*/
public static function updateUserInput(array $detail)
{
$event = self::find($detail['id']);
$event->your_name = $detail['your_name'];
$event->email = $detail['email'];
$event->title = $detail['title'];
$event->location = $detail['location'];
$event->description = $detail['description'];
$event->date = $detail['date'];
$event->save();
}
但是它有很多迭代,例如$event->foo
和$detal['bar'];
。
您将如何处理此代码以使其清晰美观?
答案 0 :(得分:2)
由于数组键与模型属性相同
您可以遍历模型的属性列表并进行相应分配
public static function updateUserInput(array $detail)
{
$event = self::find($detail['id']);
foreach(array_keys($event->getAttributes()) as $attribute) {
$event->$attribute = $detail[$attribute];
}
$event->save();
}
或者使用雄辩的fill()
方法并将注释中指出的数据数组传递给它
public static function updateUserInput(array $detail)
{
$event = self::find($detail['id']);
$event->fill($detail);
$event->save();
}
但是您必须将所有属性添加到模型中受保护的$fillable
属性,或将$guarded
设置为空数组
Event.php
protected $guarded = [];
来自the docs
希望这会有所帮助
答案 1 :(得分:1)
只要击中它
self::findOrFail($data['id'])->update($data);
请确保根据您的$ data参数索引标识符填充模型中的内容