Bitte meine Klassenkonstruktors betrachten:Clone und Kette Problem in Laravel Query Builder und Warteschlangen
public function __construct(User $query = null)
{
$this->query = $query ?: (new User())->getQuery();
}
Ich habe eine Methode wie folgt aus:
public function getNullActivityUsers()
{
$query = clone $this->query;
$query->whereNull('activity');
return $query->get();
}
Wenn ich diese Methode aufrufen, die SQL-Abfrage wird dies:
select * from `users` where `activity` is null
Aber wenn ich schiebe diese Methode in Laravel Warteschlange, wird die Abfrage sein:
select * from `users`
In der Tat wäre das Verkettungsverfahren von whereNull
nicht in dieser Methode aufgerufen werden. Ich sollte das Verfahren auf diese Version ändern:
public function getNullActivityUsers()
{
$query = clone $this->query;
$query = $query->whereNull('activity');
return $query->get();
}
Dies wird den Trick: $ query = $ query-> whereNull ('Aktivität');
Aber ich möchte wissen, warum Laravel in diesem Fall anders verhält. Wenn ich die Methode außerhalb der Warteschlange teste, ist die Verkettung vorhanden. Aber wenn ich die Throw Queue starte, wird es andere Ergebnisse bekommen.
((Stellen Sie sich vor, dass ich immer, dass clone
verwenden sollte.))
Versuchen Sie in der gleichen Zeit zu verketten und zurückzukehren: 'return $ query-> whereNull ('activity') -> get();' !! – Maraboc
Ich weiß !! Aber stell dir vor, dass ich das auf diese Weise machen will. In der Tat möchte ich über die verschiedenen Ergebnisse von Laravel wissen. – MisaGH