我的 model1 中有这种类型的变异器,用分号替换小数点分隔符:
protected function fee(): Attribute{
return Attribute::make(
get: fn (?string $value) => str_replace('.', ',', $value) ?: 0,
set: fn (?string $value) => str_replace(',', '.', $value) ?: 0,
);
}
当我将它们传递给刀片时:
Model1::all()
变异器工作并打印我,例如:
1,50
当我将它们传递到刀片时(我有过滤器要执行):
$model1 = DB::table('model1');
$model1->where(....);
$model1->get();
变异器不起作用并打印:
1.50
我做错了什么?
变异器仅适用于雄辩模型,当您使用 DB::table 时,您没有使用模型层与数据库通信,您直接连接到数据库,因此所有变异器,访问器,强制转换属性和...您已经定义在雄辩模型中不参与您的请求生命周期。 :)