2017-07-27 18 views
0

私は3つのモデルを結合しています。 inventory.statusが1(つまりアクティブ)の場合にのみテーブルの詳細を取得する必要があります。 どのようにしてその状態を朗らかな雄弁に書くことができますか?以下は私の質問です。前もって感謝します。Laravel条件ベースのSQLクエリ

$data['inventories'] = Inventory:: 
    Join('category_info','inventory.category_id','=','category_info.category_id') 
    ->leftJoin('workspace_member_inventory', 'inventory.inventory_id', '=', 'workspace_member_inventory.inventory_id') 
    ->leftJoin('workspace_members','workspace_member_inventory.member_id','=','workspace_members.member_id') 
    ->where('inventory.workspace_id', '=', $workspace_id) 
    ->select('inventory.*', 'workspace_member_inventory.member_id','workspace_members.*','category_info.category_name', 'inventory.status as status') 
    ->get() 
    ->toArray(); 

答えて

0

私は理解している場合、私は知らないが、私はあなたがLaravel Query Scopes

を探しているあなたのインベントリモデルにスコープを書くことを考える:

public function scopeIsActive($query,$status = null){ 
    if(!is_null($status)){ 
     if($status == 1){ 
      return $query->leftJoin('workspace_members','workspace_member_inventory.member_id','=','workspace_members.member_id')->where('inventory.status',1); 
     }else{ 
     return $query->where('inventory.status',0); 
     } 
    }else{ 
     return $query; 
    } 
} 

次に、あなたのクエリに追加します。

$data['inventories'] = Inventory:: 
    Join('category_info','inventory.category_id','=','category_info.category_id') 
    ->leftJoin('workspace_member_inventory', 'inventory.inventory_id', '=', 'workspace_member_inventory.inventory_id') 
    ->where('inventory.workspace_id', '=', $workspace_id) 
    ->isActive(1) 
    ->select('inventory.*', 'workspace_member_inventory.member_id','workspace_members.*','category_info.category_name', 'inventory.status as status') 
    ->get()->toArray();