dan*_*990 1 php database-migration laravel
我们在表中有很多记录,我们需要在部署代码之前更新列的所有值.所以我们计划批量更新表,这里是代码的一个例子(实际的块大小要大得多).但是[BadMethodCallException] Method update does not exist.当我运行迁移时,我进入了块.我做错了什么?
class AlterContactsUpdateColumn extends Migration
{
public function up()
{
DB::table('contacts')->chunk(100, function ($rows) {
$rows->update(['is_valid' => true]);
});
}
}
Run Code Online (Sandbox Code Playgroud)
$ rows将是100个stdClass对象的集合,因为:
你没有使用Eloquent.您正在使用查询构建器,因此您将无法使用模型来调用更新方法.
Chunk将一个集合(而不是单个实例)注入回调.
如果你有一个名为Contact的Eloquent Model,你可以这样做:
Contact::chunk(100, function ($rows) {
$rows->each(function($contact) {
$contact->update(['is_valid' => true]);
});
});
Run Code Online (Sandbox Code Playgroud)
或者可能效率更高,如果您只是更新每个联系人,则每个联系人运行一个查询而不是一个查询:
DB::table('contacts')->update(['is_valid' => true]);
Run Code Online (Sandbox Code Playgroud)