Laravel Eloquent:插入数据

时间:2015-07-01 17:54:05

标签: laravel eloquent

我通过 post method 发送大量数据。目前我正在使用一个完全可行的解决方案:

$dataClient = new Client;
$dataClient->name    = $post['client']['name'];
$dataClient->address = $post['client']['address'];
...
$dataClient->save();        

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

如果您要添加更多内容,例如计算值,该怎么办?

示例:

$dataClient = new Client;
Then map array keys to db keys
$dataClient->someField = someCalculatedValue 
$dataClient->save();

提前谢谢。

3 个答案:

答案 0 :(得分:7)

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

Client::create($post['client']);

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

$client = new Client($post['client']);
$client->someField = 'some value';
$client->save();

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

$client = new Client();
$client->fill($post['client']);
$client->save();

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

protected $fillable = ['name', 'address', 'etc'];

More information about Mass Assignment

答案 1 :(得分:3)

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

inputs = ['name' => 'value','address' => 'value'];
Client::create(inputs)

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

答案 2 :(得分:1)

你尝试过这样的事吗?

$dataClient = new Client;
$dataClient->fill($client);
$dataClient->save();

根据您设置客户端模型的方式以及您设置为保护/可填充的字段,fill方法将自动将数据与各自的字段进行映射。