4 votes

Laravel eloquent pour implémenter une jointure interne pour deux tables

J'ai besoin que Laravel eloquent mette en œuvre une jointure interne pour deux tables.

select materials.id, 
        material_lists.name, material_lists.cost, 
        colors.code, colors.hex, colors.name,
        materials.color_cost, materials.estimation, materials.remarks
    from materials 
    inner join  
    material_lists on materials.material_id = material_lists.id 
    inner join
    colors on colors.id = materials.color_id 
    where carpet_id = '2'

0 votes

Pouvez-vous être plus précis sur ce que vous essayez de faire avec cette requête ? Veuillez également développer un peu votre question afin de fournir des informations sur le type d'aide que vous attendez.

3voto

Niklesh Points 1386

Vous pouvez demander jointure interne comme ceci avec laravel Constructeur de requêtes DB

$result = DB::table("materials as m")
->join("material_lists as ml","ml.id","=","m.material_id")
->join("colors as c","c.id","=","m.color_id")
->where('m.carpet_id',2)
->select("m.id", 
        "ml.name", "ml.cost", 
        "c.code", "c.hex", "c.name",
        "m.color_cost", "m.estimation", "m.remarks")
->get();

Partagez votre modèle et votre relation si vous l'avez réalisé.

2voto

Radu Points 794

Si vous souhaitez utiliser Eloquent, vous devez le faire :

  1. Créer des modèles associés aux matériaux et à la table materials_lists.
  2. Établissez des relations entre les deux modèles de la manière suivante :

Dans la classe du modèle de matériau, vous devez avoir une relation de type "un à plusieurs" :

 public function MaterialsList {
    return $this->haveMany ('MatrialLists_ModelName')
 }  

et une relation de type "belongsTo" à l'inverse dans la classe modèle MaterialsLists.

 public function Materials {
    return $this->belongsTo ('Materials_ModelName')
 }  

3. Vous pouvez alors faire référence aux propriétés de l'objet MaterialsList à partir de l'objet Materials de la manière suivante :

 $materialsListCollection = $materials ->MaterialsLists->all(); 

où $materials est une instantion du modèle des matériaux.

Si Eloquent n'est pas obligatoire, vous pouvez utiliser la méthode de jointure de Query Builder avec DB facade quelque chose comme ça :

$collection = DB::table('materials')
 join('material_lists' , 'materials.id' , '=','material_lists,id') -> 
 join('colors' , 'colors.id' , '=','materials.colors,id') -> 
 select ('materials.id', 'material_lists.name', 'material_lists.cost', 
    'colors.code', 'colors.hex', 'colors.name' 'materials.color_cost', 
     'materials.estimation', 'materials.remarks') 
      ->where('carpet_id' , '2')->get()

J'espère que cela vous aidera :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X