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