我们在表中有很多记录,我们需要在部署代码之前更新列的所有值。所以我们计划批量更新表,这里是代码的一个例子(实际的块大小要大得多)。但是,当我运行迁移时,我在块中得到[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]);
});
}
}
答案 0 :(得分:6)
$ rows将是100个stdClass对象的集合,因为:
您没有使用Eloquent。您正在使用查询构建器,因此您无法使用模型来调用更新方法。
Chunk会将一个集合而不是单个实例注入您的回调中。
如果您有一个名为Contact的
的雄辩模型,您可以这样做 Contact::chunk(100, function ($rows) {
$rows->each(function($contact) {
$contact->update(['is_valid' => true]);
});
});
或者可能效率更高,如果您只是更新每个联系人,则每个联系人运行一个查询而不是一个查询:
DB::table('contacts')->update(['is_valid' => true]);