Laravel 4 - 如何关闭时间戳以更新整个集合

Swi*_*ftD 1 php laravel eloquent laravel-4

我正在尝试对雄辩的集合进行大规模更新.

所以我有我的查询,看起来有点像这样:

\Responder::with('details')
      ->where('job_number', $project->job_number)
      ->where('batch_id', ((int) $batch_id) - 1)
      ->where('updated_at', '<=', $target_time)
      ->whereHas('transactions', function($q) {
            $q->where('status', 'success');
      }, '<', 1)
      ->whereHas('details', function($q) {
            $q->where('email', '<>', '');
      });
Run Code Online (Sandbox Code Playgroud)

这个查询对象存储为$ query(因为我正在重新使用它 - 我不想切换我正在进行查询的原因相同),然后我对集合执行更新,例如

$query->update(array('batch_id' => $batch_id));
Run Code Online (Sandbox Code Playgroud)

除非更新所有'updated_at'时间戳,否则这种方法很有效.现在我喜欢时间戳,它们在其他地方广泛使用,所以我不能一起关闭它们但我想我可以暂时禁用它们但我尝试了以下内容:

$query->timestamps = false;
$query->update(array('email_drop_off_index' => $batch_id));
Run Code Online (Sandbox Code Playgroud)

我可以确认这不起作用,有没有办法做到这一点?

任何帮助非常感谢

Unn*_*wut 5

timestamps = false应该在您的模型上进行,但您正在做的是在查询构建器上设置值.这就是为什么它没有被捡起来.

timestamps是一个实例变量,因此您无法静态设置它,我认为没有内置方法可以从查询构建器中执行此操作.所以我建议首先尝试实例化模型,然后从中创建一个新查询,如下所示:

$responder = new \Responder;
$responder->timestamps = false;

$query = $responder->newQuery()
    ->with('details')
    ->where('job_number', $project->job_number)
    ...; // the rest of your wheres

$query->update(array('email_drop_off_index' => $batch_id));
Run Code Online (Sandbox Code Playgroud)