2016-05-24 47 views
1

如何写下面的原始查询在Laravel雄辩Laravel哪里都不在sqbquery

SELECT * 
FROM document_types 
WHERE document_types.id 
NOT IN (
SELECT enterprise_document.document_id 
FROM enterprise_document 
WHERE document_types.id = enterprise_document.document_id 
AND fy_id = 1 AND enterprise_id=1 
) 
AND document_category_id=2 

回答

0

代码试试这个:

$result=DB::table('document_types') 
      ->select('document_types.*') 
      ->leftJoin('enterprise_document', 'enterprise_document.document_id', '=', 'document_types.id') 
      ->where('document_types.document_category_id', '=', 2) 
      ->where('enterprise_document.fy_id ', '=', 1); 
      ->where('enterprise_document.enterprise_id', '=', 1); 
      ->whereNotIn('document_types.id','enterprise_document.document_id') 
      ->get(); 
1

以下是此问题的解决方案。最后我参考了Laravel文档完成了它。

\DB::table('document_types')->whereNotIn('document_types.id', function($query){ 
      $query->select('enterprise_document.document_id') 
       ->from('enterprise_document') 
       ->whereRaw('document_types.id=enterprise_document.document_id') 
       ->where('fy_id', 1) 
       ->where('enterprise_id', 1); 
     })->where('document_category_id', 2) 
      ->get(); 
0

您还可以试试下面

$docids=DB::table('enterprise_document') 
      ->join('document_types', 'enterprise_document.document_id', '=', 'document_types.id') 
      ->select('enterprise_document.document_id') 
      ->where('enterprise_document.fy_id ', '=', 1); 
      ->where('enterprise_document.enterprise_id', '=', 1); 
      ->get(); 

$document_types = DB::table('document_types') 
        ->whereNotIn('id', $docids)->get();