使用此命令以块的形式批量插入大型数据库:
Tuple
但是我想要的是在实际的DB::table($table)->insert($chunk);
操作之前,我希望能够为每个表修改insert
数组以添加/删除进入数据库的某些属性。为此,我在模型中设置$chunk
事件:
saving
但是,事件似乎不适用于public static function boot()
{
parent::boot();
static::saving(function ($model) {
Log::info('saving');
return true;
});
}
操作。
任何人都可以告诉我如何实现这一目标?
PS:我不能使用Model::insert
(虽然保存事件可以使用它)方法,因为它只允许我一次保存一条记录而我需要批量插入每个块
由于
答案 0 :(得分:2)
在这种情况下,您必须创建自己的事件/列表器。
这样的事情:
// For increment and decrement no. of units
var def = $('#costcenter_data tr').find('td:nth-child(2)').html(); // default value or the "12" in the example
var out = def;
// Increment button
$('.btn.btn-xs.btn-primary.add-unit').click(function(e){
var count = $('#costcenter_data tr').find('td:nth-child(2)');
var value = parseInt(count.data('change_value'));
var clicked;
if (isNaN(value) && isNaN(prev)) {
value = 1;
count.data('clicked', "+")
} else {
value++;
}
var prev = count.data('clicked');
if (prev != "+") {
clicked = "-";
} else {
clicked = prev;
}
$('#costcenter_data tr').find('td:nth-child(2)').html(out+clicked+value);
count.data('change_value', value);
count.data('clicked', "+");
});
// Decrement button
$('.btn.btn-xs.btn-warning.remove-unit').click(function(e){
var count = $('#costcenter_data tr').find('td:nth-child(2)');
var value = parseInt(count.data('change_value'));
var clicked;
if (isNaN(value) && isNaN(prev)) {
value = 1;
count.data('clicked', "-")
} else if ((value-1) < 0) {
value--;
value = Math.abs(value);
if (value == parseInt(def)) {
alert("Delete prompt here");
return false;
}
} else {
value--;
clicked = count.data('clicked');
}
var prev = count.data('clicked');
if (prev != "-") {
clicked = "+";
} else {
clicked = prev;
}
$('#costcenter_data tr').find('td:nth-child(2)').html(out+clicked+value);
count.data('change_value', value);
});
php artisan make:event SomeEventName
然后你创建你的监听器(你可以根据laravel docs创建一个单独的文件)或者只是把它放在引导模型方法
//App\Events\SomeEventName
class SomeEventName extends Event
{
use SerializesModels;
public $chunk;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(&$chunk)
{
$this->chunk = &$chunk;
}
}
然后像这样使用它:
\Event::listen('App\Events\SomeEventName', function($event) {
$event->chunk = ['hello new world']; // this will replace the old chunk
});