0

请考虑我的类构造函数:

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一直使用它。))

4

1 回答 1

0

我还没有测试过它,如果它像这样工作,我会说这是一个错误。

然而最重要的是 - 在验证发生了什么之前,您是否停止/重新启动了队列?在这种情况下,您可能会得到误报,因为队列将使用旧代码。每次对代码进行更改时,都应该重新启动队列工作程序,以确保它会看到代码中所做的更改。如果是这种情况,请参阅队列工作人员和部署部分。

于 2017-12-13T09:09:39.910 回答