Laravel Eloquent:插入数据

5

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

$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();

Thank you in advance.


它必须使用Eloquent吗?还是可以使用QueryBuilder - DavidDomain
我更喜欢Eloquent。这样我就可以保留关联和例如创建日期。 - be-codified
4个回答

20

在从数据数组创建模型时,您有许多选项。如果您想直接将其插入数据库中,则最简单的方法是使用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();

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


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

有关批量赋值的更多信息


lukasgeiter,谢谢你的回答。你能给我举个其他的批量赋值漏洞的例子吗? - be-codified
1
这是一个简单的例子:假设你有一个字段 is_admin。现在,你会将请求数据直接传递给模型,它只会保存所有值,任何人都可以通过操纵请求数据并添加 is_admin=1 来使自己成为管理员。 - lukasgeiter

8

Eloquent有创建和更新方法,可以插入大量数据。例如:

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

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


2
你需要注意受保护/可填充的内容。 - Sean Routledge

2
你尝试过类似这样的东西吗?
$dataClient = new Client;
$dataClient->fill($client);
$dataClient->save();

根据您设置客户端模型的方式以及设置为守卫/可填充的字段,fill方法将自动将数据与其相应的字段映射。


1
DB::table('nodes')->insertGetId(
  [
    'name' => $name,
    'walletaddress' => $wallet,
    'datecreated' => '11'
  ]
);

1
你的回答可以通过添加更多关于代码的信息以及它如何帮助提问者来改进。 - Tyler2P
以上代码使用DB库将数据插入到数据库中...它会插入并返回ID作为响应..谢谢 - Emmanuel Iyen-Mediatrees

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接