2017-07-27 96 views
0

我有三个模型加入。仅当inventory.status为1(即有效)时,我需要获得workspace_members表格详细信息。 我怎样才能用尖锐的口才写出这个条件?以下是我的查询。提前致谢。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();