2016-04-29 9 views
0

Ich habe 2 Tabelle für innere Join Query Datensätze in Laravel eloquent erhalten, aber funktioniert nicht mit kombinieren Daten erhalten.Laravel Eloquent Joins Verwendung von gehört zu

Tabelle: Kategorie

  1. id
  2. Name
  3. cat_status

Tabelle: Bild

  1. id
  2. Titel
  3. ab
  4. img_status

Bildsteuerung

//get all active images  
    ImageModel::where('status',true)->get();  
    public function getCategory() { 
      return $this->belongsTo('\App\Api\CategoryModel','cat_id');  

get Kategorie nur aktiv

public function getActiveCategory() { 
      return $this->getCategory()->where('cat_status','=', 1); 
     } 

Ich brauche nur zu erhalten, die Kategorie aktiv ist, nur Bilder.

if cat 1,2,3 3(is inactive) 
image table 
title=a1,cat_id=1, 
title=a2,cat_id=2, 
title=a3,cat_id=3 

Jetzt bekomme ich alle 3 Bilder, ich brauche nur zuerst 2, weil cat_id 3 inaktiv ist. Irgendwelche Ideen, wie ich der Statusbedingung beitreten kann.
Vielen Dank im Voraus.

+0

Ihre Methode gehört mir in Model nicht im Controller. –

+0

Entschuldigung .. ich habe falsch hinzugefügt .. einfügen Controller Teil hier. Gehört zum Zustand ist Modell. – shashik493

+0

Sie können die Option "Eager Loading" zum Abrufen verwenden. Es ist ziemlich klar im Doc –

Antwort

0

Well-Relation-Methoden bietet keine Joins. Sie müssen es manuell tun. Wenn Sie Bilder aus dem aktiven Kategorien zu erhalten, dann müssen Schmetzen wie diese Abfrage:

// method from image model 
public function getImagesFromActiveCategory() { 
    return $this->join('category') 
     ->select('image.*') 
     ->join('category', 'category.id', '=', 'image.cat_id') 
     ->where('cat_status','=', 1) 
     ->get(); 
} 
0

Danke für Ihr die schnellen Antworten geben, Ich habe versucht, andere zu benutzen, aber ist nun mit der Verwendung gelöst der Methode belongsToMany. Die folgenden Funktionen geben genaue Datensätze aus der Datenbank an, die nur mit den einzelnen Kategorie- und Bildtabellen und den Kategorienstatus-aktiven Datensätzen übereinstimmen.

#Image Controller 
$images= ImageModel::where('status',true)->get(); 
    foreach($images as $img){ 
    #get data 
    $onlyactiveCategoryImages=$img->getActiveCategory()->get(); 
    } 

#image Model 

    #get category data 
    public function getCategory() { 
    return $this->belongsToMany('\App\Api\CategoryModel','images','id','cat_id'); 
    } 

    #get category active only 
     public function getActiveCategory() { 
     return $this->getCategory()->where('cat_status','=', 1); 
    } 

Vielen Dank noch einmal für alle :).