提问人:miken32 提问时间:5/3/2022 更新时间:5/3/2022 访问量:387
没有匹配数据库列的 Laravel 变元
Laravel mutators without a matching database column
问:
我正在考虑将我的 mutator 和访问器更新为 Laravel 9 中引入的新语法,但我似乎无法让它工作。
我目前有一个模型,它与充当键值存储的对象有关系。作为简写,我使用变值器来设置几个更常用的设置。非常简化,看起来像这样:MorphMany
Settings
class Item extends Model
public function setSomeSettingAttribute($value)
{
$key = "some_setting";
Setting::updateOrCreate(
["settable_id" => $this->id, "settable_type" => self::class, "key" => $key],
["value" => $value]
);
}
}
$m = Item::find(1);
// typically in a controller this would be $request->all()
$arr = ["some_setting" => 234];
$m->update($arr);
这工作正常,并且设置已更新。需要注意的重要一点是,数据库中没有名为 的列。some_setting
在新代码中,mutator 似乎应该如下所示:
public function someSetting(): Attribute
{
$key = "some_setting";
return Attribute::make(
set: function ($value) use ($key): void {
Setting::updateOrCreate(
["settable_id" => $this->id, "settable_type" => self::class, "key" => $key],
["value" => $value]
);
}
);
}
但这是行不通的;Laravel 尝试在列中插入某些内容,导致 SQL“找不到列”错误。some_setting
有没有办法解决这个问题,不涉及编辑我所有的控制器代码来删除假列?或者,如果没有,旧的 mutator 语法是否以任何方式被弃用?
答: 暂无答案
下一个:proc_open权限问题
评论