有没有什么方法可以运行 laravelseed仅插入不存在的记录?
我当前的 laravel 播种机看起来像这样
DB::table('users')->insert([
//Global Admin
[
'member_id' => 11111111,
'firstname' => 'Joe',
'lastname' => 'Bloggs'
],
[
'member_id' => 22222222,
'firstname' => 'Jim',
'lastname' => 'Bloggs'
],
]);
Run Code Online (Sandbox Code Playgroud)
相当标准!
我是否必须将每个插入内容都包装在 try catch 中?像这样
try {
DB::table('users')->insert(['member_id' => 11111111, 'firstname' => 'Joe', 'lastname' => 'Bloggs']);
} catch(Exception $e){
//Die silently
}
try {
DB::table('users')->insert(['member_id' => 22222222, 'firstname' => 'Jim', 'lastname' => 'Bloggs']);
} catch(Exception $e){
//Die silently
}
Run Code Online (Sandbox Code Playgroud)
稍后,我可能想向同一个播种器添加额外的行,而不必编写新行,然后重新运行php artisan db:seed以仅添加新行。
这可能吗?
您可以通过 Eloquent firstOrCreate来实现这一点。
firstOrCreate 方法将尝试使用给定的列/值对来查找数据库记录。如果在数据库中找不到模型,则会插入一条记录,其中包含第一个参数中的属性以及可选的第二个参数中的属性。
因此,如果您通过 member_id 识别用户,您可以执行以下操作:
User::firstOrCreate(
['member_id' => 11111111],
[
'firstname' => 'anakin',
'lastname' => 'skywalker',
'password' => Hash::make('4nak1n')
]
);
Run Code Online (Sandbox Code Playgroud)
如果您想通过“member_id”、“firstname”和“lastname”字段查找记录,如下所示:
User::firstOrCreate(
[
'member_id' => 11111111,
'firstname' => 'anakin',
'lastname' => 'skywalker'
],
[
'password' => Hash::make('4nak1n'),
]
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10420 次 |
| 最近记录: |