2016-04-29 9 views
0

私はlaravelの雄弁で内部結合クエリレコードを取得するために2つのテーブルを持っていますが、結合データは処理されません。Laravel Eloquent結合の使用:

表:カテゴリ

  1. ID
  2. cat_status

表:画像

  1. ID
  2. タイトル
  3. DESC
  4. img_status

画像コントローラ、私は唯一のカテゴリがアクティブであるかを取得する必要があるだけ

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

アクティブ

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

のgetカテゴリ、その画像のみ。

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 

cat_id 3がアクティブではないため、3枚の画像がすべて取得できます。最初は2枚必要です。 どのように私は状態条件に参加することができますアイデア。
ありがとうございます。

+0

あなたのメソッドに属しているのは、コントローラではないモデルです。 –

+0

申し訳ありません。コントローラの部分に間違って貼り付けました。状態に属するのはモデルです。 – shashik493

+0

eager loadingオプションを使用して取得できます。それはかなり明確な文書です –

答えて

0

よく関係するメソッドは結合を提供しません。手動で行う必要があります。 あなたはアクティブなカテゴリから画像を取得したい場合は、You''llは次のように照会する必要があります:

// 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

は、私は他のを使用しようとしたが、使用して解決されました、あなたは、迅速な応答を与えるため をいただき、ありがとうございますbelongsToManyメソッドの 以下の関数は、DBからの正確なレコードを提供します。これは、各カテゴリおよびイメージテーブルと一致し、カテゴリステータスはアクティブなレコードのみです。

#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); 
    } 

もう一度ありがとうございます:)。