Bonjour,

Je suis nouveau dans le monde de Laravel,et je rencontre un petit problème avec mon code.

Je désire faire mon backend via Laravel, et mon frontend en Angular2. J'utilise donc Laravel Passport pour l'authentification. J'arrive à obtenir mon token via /oauth/token, et dans la route /api/user je retourne le user connecté :

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

Seulement, j'ai des objets qui lui sont lié (équipe, groupe) et ici je n'ai que leur identifiant. Dans l'idéal, j'aimerai que $request->user() me retourne directement le user avec les objets étrangers, et non uniquement les clés étrangères. Mon but ici est d'éviter de faire plusieurs requêtes.

Savez-vous comment je peux faire ça?

Merci d'avance !

3 réponses


Salut,

il me semble qu'en utilisant Passport tu seras de toute façon obligé de faire plusieurs requêtes, mais je dirais que pour en faire le moins possible, tu dois utiliser la méthode load() sur ton User:

return $request->user()->load('articles','comments');

Ensuite, tu as toujours la solution de définir dans ton modèle User les relations que tu veux charger systématiquement, mais honnêtement je ne le conseille pas forcément parce que ça alourdit parfois pas mal les requêtes et les réponses alors que tu n'en as pas forcément besoin à chaque fois:

class User extends Model 
{
    protected $with = ['articles','comments'];
}
DimZ
Auteur

Salut !

Merci beaucoup pour ta réponse, c'est ce que je cherchais :)
La 2ème solution m'interesse, je pense mettre en place cette dernière et si les perfs chutent trop, j'utiliserai la 1ère solution.

Le truc c'est que tu feras d'office plusieurs requêtes, le with fait plusieurs requêtes et le load aussi, si tu veux faire qu'une requête tu dois faire des liaisons