请考虑我的类构造函数:
public function __construct(User $query = null)
{
$this->query = $query ?: (new User())->getQuery();
}
我有这样的方法:
public function getNullActivityUsers()
{
$query = clone $this->query;
$query->whereNull('activity');
return $query->get();
}
当我调用此方法时,sql 查询将是这样的:
select * from `users` where `activity` is null
但是当我将此方法推送到laravel 队列中时,查询将是这样的:
select * from `users`
实际上,该方法中whereNull
不会调用 的链接方法。我应该将方法更改为此版本:
public function getNullActivityUsers()
{
$query = clone $this->query;
$query = $query->whereNull('activity');
return $query->get();
}
这将解决问题:$query = $query->whereNull('activity');
但我想知道,为什么 laravel 在这种情况下表现不同。因为如果我在队列外测试方法,链接就会在那里。但是如果我运行它抛出队列,它会得到其他结果。
((想象一下我应该clone
一直使用它。))