Heim > Backend-Entwicklung > PHP-Tutorial > Wie frage ich das neueste verknüpfte Modell eines Modells mit bestimmten Bedingungen in Laravel ab?

Wie frage ich das neueste verknüpfte Modell eines Modells mit bestimmten Bedingungen in Laravel ab?

WBOY
Freigeben: 2016-10-22 00:14:11
Original
971 Leute haben es durchsucht

Ich habe gerade eine Frage zu StackOverflow gestellt, bitte beantworten Sie sie.

http://stackoverflow.com/ques...

Ein Paketmodell hat viele Schrittmodelle. In Step gibt es zwei Felder: das Statusfeld vom Typ tinyint und das Zeitstempelfeld.
Gehen Sie von einem Paket A mit den folgenden Schritten aus

  • Am 18. um 10:00 Uhr ist der Status 1

  • Am 19. um 9:00 Uhr ist der Status 2

Angenommen, ein Paket B enthält die folgenden Schritte

  • Um 8:00 Uhr am 19. ist der Status 1

  • Am 19. um 9:00 Uhr ist der Status 2

  • Am 19. um 10:00 Uhr ist der Status 3

Auf diese Weise ist der letzte Schrittstatus von A 2 und der letzte Schrittstatus von B ist 3.

Wie kann man dann die Pakete abfragen, deren letzter Schrittstatus 2 ist?

Ich habe versucht,

zum Paketmodell hinzuzufügen
<code>public function steps()
{
    return $this->hasMany('App\Step');
}

public function status()
{
    return $this->steps()->latest()->limit(1);
}
</code>
Nach dem Login kopieren
Nach dem Login kopieren

Dann fragen Sie so ab

<code>Package::whereHas('status', function ($q) {
    $q->where('status', 2);
})->get();
</code>
Nach dem Login kopieren
Nach dem Login kopieren

Aber ich kann nicht die erwarteten Ergebnisse erzielen.

Das sogenannte nicht erwartete Ergebnis bedeutet, dass ich, wenn nur B in der Pakettabelle vorhanden ist, die Pakete abfragen möchte, deren letzter Schrittstatus 2 ist, und der letzte Schrittstatus von B 3 ist, also sollte das Ergebnis sein leer, aber das Abfrageergebnis sieht so aus: Das Ergebnis ist nicht leer, sondern enthält B.

Dann habe ich versucht, zu

zu wechseln
<code>public function status()
{
    return $this->hasOne('App\Step')->latest();
}
</code>
Nach dem Login kopieren
Nach dem Login kopieren

Immer noch das Gleiche.

Ich habe gerade erst Laravel kennengelernt und war sehr verwirrt, als ich auf dieses Problem stieß. Ich habe auch viel bei Google gesucht, aber nicht die Antwort gefunden, die ich wollte. Ich hoffe, Sie können mir helfen, danke!

Verwendung von Laravel 5.3

Antwortinhalt:

Ich habe gerade eine Frage zu StackOverflow gestellt, bitte beantworten Sie sie.

http://stackoverflow.com/ques...

Ein Paketmodell hat viele Schrittmodelle. In Step gibt es zwei Felder: das Statusfeld vom Typ tinyint und das Zeitstempelfeld.
Gehen Sie von einem Paket A mit den folgenden Schritten aus

  • Am 18. um 10:00 Uhr ist der Status 1

  • Am 19. um 9:00 Uhr ist der Status 2

Angenommen, ein Paket B enthält die folgenden Schritte

  • Um 8:00 Uhr am 19. ist der Status 1

  • Am 19. um 9:00 Uhr ist der Status 2

  • Am 19. um 10:00 Uhr ist der Status 3

Auf diese Weise ist der letzte Schrittstatus von A 2 und der letzte Schrittstatus von B ist 3.

Wie kann man dann die Pakete abfragen, deren letzter Schrittstatus 2 ist?

Ich habe versucht,

zum Paketmodell hinzuzufügen
<code>public function steps()
{
    return $this->hasMany('App\Step');
}

public function status()
{
    return $this->steps()->latest()->limit(1);
}
</code>
Nach dem Login kopieren
Nach dem Login kopieren

Dann fragen Sie so ab

<code>Package::whereHas('status', function ($q) {
    $q->where('status', 2);
})->get();
</code>
Nach dem Login kopieren
Nach dem Login kopieren

Aber ich kann nicht die erwarteten Ergebnisse erzielen.

Das sogenannte nicht erwartete Ergebnis bedeutet, dass ich, wenn nur B in der Pakettabelle vorhanden ist, die Pakete abfragen möchte, deren letzter Schrittstatus 2 ist, und der letzte Schrittstatus von B 3 ist, also sollte das Ergebnis sein leer, aber das Abfrageergebnis sieht so aus: Das Ergebnis ist nicht leer, sondern enthält B.

Dann habe ich versucht, zu

zu wechseln
<code>public function status()
{
    return $this->hasOne('App\Step')->latest();
}
</code>
Nach dem Login kopieren
Nach dem Login kopieren

Immer noch das Gleiche.

Ich habe gerade erst Laravel kennengelernt und war sehr verwirrt, als ich auf dieses Problem stieß. Ich habe auch viel bei Google gesucht, aber nicht die Antwort gefunden, die ich wollte. Ich hoffe, Sie können mir helfen, danke!

Verwendung von Laravel 5.3

<code>Package::whereHas('steps', function ($q) {
    $q->where('status', 2);
})->get();</code>
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage