【发布时间】:2020-11-13 00:48:57
【问题描述】:
我有以下型号:
<?php
namespace App;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
class PaymentOption extends Model
{
protected $table = 'payment_option';
public $timestamps = false;
protected $fillable = ['payment_option_code', 'payment_option_name'];
public function setCodeAttribute($value)
{
$this->attributes['payment_option_code'] = $value;
}
public function getCodeAttribute()
{
return $this->payment_option_code;
}
public function setNameAttribute($value)
{
$this->attributes['payment_option_name'] = $value;
}
public function getNameAttribute($value)
{
$this->payment_option_name;
}
}
如您所见,我的列名很奇怪。我需要修改器,因为我将接受没有前缀 payment_option 的变量。
现在,我在我的控制器中这样做:
<?php
namespace App\Http\Controllers;
use App\PaymentOption;
use App\Http\Requests\PaymentOptionRequest;
class PaymentOptionController extends Controller
{
private $paymentOption;
public function __construct(PaymentOption $paymentOption)
{
$this->paymentOption = $paymentOption;
}
public function create(PaymentOptionRequest $request)
{
$paymentOption = $this->paymentOption->fill($request->validated());
dump($paymentOption);
return response()->json([]);
}
}
当我尝试使用 fill() 时,它不会调用 mutators。但是当我尝试将其设置为 1 比 1 时,它的工作方式如下:
$paymentOption->code = $validated['code'];
为什么会这样?
谢谢!
【问题讨论】:
-
我认为
fill根本无法与 mutators 一起使用,因为fill来自EloquentQueryBuilder,而您在PaymentOption上定义了 mutators。 -
尝试使用
create而不是fill -
这在 Laravel 5.8 中确实有效。同样的实例化
new Model(['foo'=>'bar])在升级到 Laravel 6.x 后它停止为我工作。我倾向于不使用fillable,而是在一些列上使用protected。
标签: laravel eloquent laravel-7