Laravel Eloquent:插入数据

be-*_*ied 0 laravel eloquent

我正在通过post方法发送一堆数据。现在,我正在使用一个可以正常工作的解决方案:

$dataClient = new Client;
$dataClient->name    = $post['client']['name'];
$dataClient->address = $post['client']['address'];
...
$dataClient->save();        
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更短的解决方案?就像发布数组一样,Laravel可以将键映射到db字段吗?

如果您还要添加更多内容(例如计算所得的价值)怎么办?

例:

$dataClient = new Client;
Then map array keys to db keys
$dataClient->someField = someCalculatedValue 
$dataClient->save();
Run Code Online (Sandbox Code Playgroud)

先感谢您。

luk*_*ter 7

从数据数组创建模型时,您有很多选择。如果要直接将其插入数据库,最简单的方法是create()

Client::create($post['client']);
Run Code Online (Sandbox Code Playgroud)

如果您想事后更改某些东西,或者只是不想立即保存,只需将数据传递给构造函数即可。

$client = new Client($post['client']);
$client->someField = 'some value';
$client->save();
Run Code Online (Sandbox Code Playgroud)

最后,最后一个选项,fill()手动调用。此方法在内部create()以及构造函数中都使用。

$client = new Client();
$client->fill($post['client']);
$client->save();
Run Code Online (Sandbox Code Playgroud)

注意:对于上述所有方法,您都需要在模型中设置可填充属性。这是为了防止恶意用户输入(请求数据)。

protected $fillable = ['name', 'address', 'etc'];
Run Code Online (Sandbox Code Playgroud)

有关批量分配的更多信息


Phi*_*yen 5

Eloquent 有create 和 update方法,可以插入海量数据。例如 :

inputs = ['name' => 'value','address' => 'value'];
Client::create(inputs)
Run Code Online (Sandbox Code Playgroud)

它将自动映射 Eloquent 中的字段。

  • 您需要注意受保护的/可填充的 (2认同)