2017-10-16 3 views
0

I ont 3 bases de données:Laravel 5.5 récupérer null par rapport imbriqué

Routes: id name

Tarifs:

Id 
Route_id 
Car_id 

Voitures:

id 
name 

Mon modèle pour les routes

public function rates() 
{ 
    return $this->hasMany('App\Rate', 'route_id'); 
} 

Mon modèle pour les taux

public function car() { 
    return $this->belongsTo('App\Car','car_id'); 
} 

Maintenant, je dois accéder à la relation de voiture, mais quand je fais

return $this->route->with('from','to','rates.car')->paginate(74); 

Je reçois nulle pour la relation de voiture

{"id":1,"from_id":1,"to_id":2,"distance":400,"created_at":null,"updated_at":null,"from":{"id":1,"name":"\u0410\u043a\u043a\u043e","created_at":null,"updated_at":null,"lat":32.93310000000000314912540488876402378082275390625,"long":35.0827000000000026602720026858150959014892578125},"to":{"id":2,"name":"\u0410\u0440\u0430\u0434","created_at":null,"updated_at":null,"lat":31.261399999999998300381776061840355396270751953125,"long":35.21490000000000009094947017729282379150390625},"rates":[{"id":1,"route_id":1,"car_id":1,"rate":1123,"night_rate":1391,"car":null},{"id":5551,"route_id":1,"car_id":2,"rate":1123,"night_rate":1391,"car":null},{"id":11101,"route_id":1,"car_id":3,"rate":1123,"night_rate":1391,"car":null},{"id":16651,"route_id":1,"car_id":4,"rate":1123,"night_rate":1391,"car":null},{"id":22201,"route_id":1,"car_id":5,"rate":1123,"night_rate":1391,"car":null},{"id":27751,"route_id":1,"car_id":6,"rate":1123,"night_rate":1391,"car":null},{"id":33301,"route_id":1,"car_id":7,"rate":1123,"night_rate":1391,"car":null},{"id":38851,"route_id":1,"car_id":8,"rate":1123,"night_rate":1391,"car":null}]}, 

Répondre

0

D'après ce que je comprends, vous essayez d'accéder à un modèle de voiture à travers un modèle de route. Un certain nombre de choses que j'ai remarquées devraient vous aider à trouver une solution.

Tout d'abord, je pense que la relation inverse, vous êtes censé utiliser la fonction belongToMany() à la place.

public function car() { 
    return $this->belongsToMany('App\Car','Rates'); // Perhaps call the table something like routes_cars to more clearly define it's a pivot table 
} 

Ensuite, je vois que vous essayez d'utiliser les fonctions de modèle dans le cadre de $this(). Je suppose que vous faites cela dans votre modèle? Cette logique devrait être dans un contrôleur, cela pourrait causer des résultats non désirés mais je ne suis pas entièrement sûr. En outre, il semble que vos paramètres soient incorrects lors de l'utilisation de with(). Vous utilisez le nom de la fonction que vous avez définie dans belongsToMany()

App/Route::with('car')->paginate(74); 

Avec la configuration des relations correcte, vous devez rarement à vous soucier du tableau croisé dynamique. Si vous souhaitez ajouter des informations supplémentaires dans le tableau croisé dynamique, il existe des fonctions laravel pour vous aider à le faire dans la documentation.

+0

$ this-> route est utilisé dans un contrôleur avec une fonction de construction. –

+0

Et les tarifs ne sont pas utilisés comme un tableau croisé dynamique, il y a deux colonnes que j'ai oublié d'écrire rate et night_rate. Mais je veux y accéder imbriqué, donc je pourrais obtenir le nom de la voiture comme ceci dans la voiture: {id: 1, nom: 'économie'}. J'ai montré un exemple –

+0

C'est un tableau croisé dynamique car il crée une relation entre deux autres tables. Ils peuvent contenir d'autres données. https://laravel.com/docs/5.5/eloquent-relationships. Recherchez 'Récupération des colonnes de table intermédiaires '. – hdifen