2017-10-16 5 views
0

Je veux extraire des données de ma base de données, mais je suis coincé lorsque j'essaie d'obtenir des données d'une autre table.Récupération de données dans une relation un à plusieurs dans laravel

C'est ce que je veux faire, quand un utilisateur se connecter à la page Web, il serait en mesure de voir une liste de noms de personnes. En cliquant sur leur nom, l'utilisateur sera redirigé vers une autre page qui montrera les détails de la personne tels que le nom, l'adresse et le courriel. Mais parce qu'il ya beaucoup d'entre eux (en supposant environ 200 personnes)

Questions:

Q1. Comment puis-je rediriger l'utilisateur vers une autre page qui est le nom (par exemple: jack, utilisateur cliquez sur le nom du jack, jack id = 1, comment est-ce que je rattache à user_id = 1 qui est la clé étrangère)

Q2. comment faire une boucle pour obtenir leurs informations au lieu de les spécifier 1 par 1 (par exemple: je ne veux pas dire id = 1, y a-t-il quelque chose comme id ++ qui va aider à ajouter automatiquement)? il ressemble à mon code: (photo prise de l'Internet mais quelque chose de semblable à ce) enter image description here

home.blade.php

<table class="table table-bordered"> 
     <tr> 
     <th><strong><big>Name AS PER NRIC/PASSPORT: </big></strong></th> 
     </tr> 
     <td> 
     <tr> 
     @foreach($data as $value) 
     <tr>  
     <th><a href="www.google.com"> {{$value->Name}}</a></th> --> I don't know how to redirect it to show user details    
     </tr> 
     @endforeach 
     </tr> 
     </tr> 
    </table> 

contrôleur

public function index() 
    { 
     return view('home'); 
    } 
    public function getData(){ 
     $data['data'] = DB::table('personal_infos')->get()->sortByDesc('upload_time'); 
     if(count($data)>0){ 
     return view('home',$data); 
}else{ 
    return view('home'); 
} 
} 
} 

Route

Route::get('/test','[email protected]'); 

personal_info modèle

class personal_info extends Eloquent 
{ 
    protected $fillable = array('Email', 'Name', 'address'); 
    protected $table = 'personal_infos'; 
    protected $primaryKey = 'id'; 
    public function user_infos() { 
     return $this->hasMany('App\user_info,'user_id'); 
    } 
     public function user_info1s() { 
     return $this->hasMany('App\user_info1','user_id'); 
    } 
} 

modèle user_info et user_info1

class user_info1 extends Eloquent 
{ 
    protected $fillable = array('hobby','sport','user_id'); 
    public function personal_infos() { 
     return $this->belongsTo('App\personal_info', 'user_id', 'id'); 
    } 
+0

'personal_infos :: avec ('user_info1s') -> get()'? – madalinivascu

+0

@madlinivascu Je l'ai déjà essayé mais ça ne marche que pour abit, je voulais obtenir les données en fonction de leur identifiant d'utilisateur à partir de la table – blastme

Répondre

0

ajoutez d'abord une route comme

Route::get('/test/{id}','[email protected]')->name("showPerson"); 

Ensuite, la configuration d'une redirection

<a href="{{route('showPerson', $value)}}"> 

Utilisez cette ligne à la place de votre href = "www.google.com"

Faire getPerson() de TestController retourner une nouvelle page, sur cette page, imprimez toutes les informations d'une personne.

Je vous suggère également de google Laracast et regarder toutes les vidéos gratuites. Ils sont environ 30 et ils vous donnent une bonne compréhension du cadre Laravel

+0

mais comment relier le tout? Par exemple, le nom Jack du lien de la table personal_infos avec la table user_infos et la table user_info1s. Je sais seulement comment le faire à travers le dossier de vue mais pas dans le contrôleur – blastme

+0

Je sais que je dois faire quelque chose comme SELECT * FROM user_infos, user_info1s, personal_infos Où user_id = personal_infos id (sry je ne me souviens pas comment écrire cette partie) mais vous devriez savoir ce que je veux dire – blastme

+0

Disons que $ value est Jack. Laravel a déjà sélectionné tous les objets pour toutes leurs données. Donc, obtenir user_infos est aussi simple que de dire $ value-> user_infos sur la bonne valeur. Essayez de vider le tableau de personnes dans votre testController. Cela vous donnera un aperçu de toutes les personnes et toutes les informations que leurs objets possèdent. Encore une fois, je vous recommande fortement de passer du temps à regarder la série Laracast sur Laravel avant d'aller plus loin. Ils ont des tutoriels gratuits et de haute qualité qui vous aideront à mieux comprendre Laravel. –

0

Modifier le lien de votre page pour vous rediriger vers la page de détail:

<th><a href="{{route('user.show',['id'=>$value->id])}}"> {{$value->Name}}</a></th> 
itinéraire

doit être:

Route::get('user/show/{id}','[email protected]')->name("user.show"); 
contrôleur

doit être:

public function getInfo($id) { 
    $user_info1 = user_info1::where('user_id',$id)->get(); 
    return $user_info1;//change this with your view 
} 
+0

Mais qu'en est-il s'il y a une autre table? Par exemple table user_infos et données table user_info1s, je veux obtenir les deux en fonction de l'identifiant de la table personal_infos – blastme

+0

puis ajouter un autre appel à la table $ db user_infos = table user_infos :: where ('user_id', $ id) -> get(); ' – madalinivascu

+0

et vous les renvoyez tous les deux – madalinivascu