如何在带有DB :: Table或类似事件的laravel中执行这样的查询?
INSERT IGNORE INTO 'banban' ('column') values('value1', 'value2')
DB::table('table')->insertIgnore( array(
array('column'=>'value1',),
array('column'=>'value2')
)
)
答案 0 :(得分:0)
除了使用DB::raw()
之外,我不确定如何使用Fluent执行此操作,但Eloquent有firstOrNew()
// Gets a user with fname of 'john' and lname of 'smith' or creates a new model and sets these properties.
$user = User::firstOrNew(['fname' => 'john', 'lname' => 'smith']);
// Lets say you want to activate john smith
$user->activated = true;
// Saves the new model or existing model (whatever it was)
$user->save();
答案 1 :(得分:0)
这是我在我的\ App \ Model的静态功能中使用的代码,用insert ignore添加多个值。这段代码汇集了我在StackOverflow上遇到的不同答案。
使用PHP 7.1.3测试和使用Laravel 5.6
$keys = ['column1', 'column2', 'column3'];
foreach ($whatever as $result) {
$banban = [];
$banban[] = $result->value1;
$banban[] = $result->value2;
$banban[] = $result->value3;
$values[] = $banban;
}
return DB::insert(
'INSERT IGNORE INTO ' . with(new self)->getTable() .
'(' . implode(',', $keys) . ') values ' .
substr(str_repeat('(?' . str_repeat(',?', count($keys) - 1) . '),', count($values)), 0, -1),
array_merge(...$values)
);
一些解释:
with(new self)
返回模型的新实例。这是在静态函数中获取Model表名的简单方法。
substr(...,0,-1)
用于删除"值的最新逗号"
str_repeat
被用于创建"(?,?,?)"占位符和"?"内部。
array_merge(...$values)
恭维值数组。这也是$values
无法拥有自定义密钥的原因。
希望这有帮助。