Heim  >  Artikel  >  Backend-Entwicklung  >  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
WBOYOriginal
2016-10-22 00:14:11939Durchsuche

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>

Dann fragen Sie so ab

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

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>

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>

Dann fragen Sie so ab

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

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>

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>
Stellungnahme:
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