Laravel Eloquent - Obtenez la dernière insertion du modèle correspondant

J'ai une connexion entre deux modèles:
Terminal

et
terminalRent

.

A Terminal peut avoir beaucoup terminalRents.
Je veux obtenir le loyer le plus récent pour un certain Terminal.


$lastRent = Terminal::with/'terminalRent'/->where/'id', $id/->orderBy/'id', 'desc'/->first//;


Utilisant
where//

Il va refléter ceux qui sont sur
Modal

hoewever Je veux avoir la dernière entrée pour terminalRent En ce qui concerne le spécifique terminal.
$id

- Cet identifiant terminal, et les tables sont associées comme suit:


Terminal
----
ID


terminalRent
-----
ID
terminal_id <--- this is the foreign key for the ID of the Terminal Table
Invité:

Conrad

Confirmation de:

Si entre chaque Terminal et Terminal loyer égal à hasMany, Vous pouvez faire quelque chose comme:


$lastRented = $lastRent->terminalRent->last//;


Assurez-vous d'avoir le dernier loué via
dd/$lastRented/;


Laisse moi savoir comment tu vas.

Edit: Si cela vous donne une mauvaise copie terminalRent try first//; Je ne me souviens pas comment Eloquent Organiser des relations eagerlaoded défaut.

Hannah

Confirmation de:

Essayez ce code


$lastRent = Terminal::with/['terminalRent' => function /$query/ { 
$query->orderBy/'id', 'desc'/->first//;
}]/;

Hannah

Confirmation de:

Vous pouvez les rejoindre, puis commander des résultats en fonction de
terminalRent.id

et choisissez le premier:


$lastRent = Terminal::join/'terminalRent', 'terminalRent.terminal_id','=','Terminal.id'/->where/'Terminal.id', $id/->orderBy/'terminalRent.id', 'desc'/->first//;

Camille

Confirmation de:

Utilisez-le pour obtenir le loyer le plus récent pour un certain Terminal:


$terminal = Terminal::find/$id/; //the terminal for which you want to get the last rent
$lastRent = $terminal->rentals//->orderBy/'id', 'DESC'/->first//;


N'oubliez pas que ce n'est qu'un moyen de le faire, il peut y avoir d'autres options mieux adaptées à vos besoins.

Emilie

Confirmation de:

@Parithiban La solution est très utile, mais cette fonctionnalité lance une demande deux fois.

Pour une meilleure performance, essayez-le


$lastRent = Terminal::with/['terminalRent' => function /$query/ { 
return $query->orderBy/'id', 'desc'/->limit/1/;
}]/;

Pour répondre aux questions, connectez-vous ou registre