2016-07-01 114 views
0

我怎麼能寫在下面的MySQL查詢中使用laravel4Laravel子查詢加入

有兩個表 表1是fee_category與字段:

id | Category 
1 | A 
2 | B 
3 | C 
4 | D 

表2是fee_charge與字段:

id | std_id | particularID | CategoryID | assign | amount 
1 | 1  | 1   | 1   | 0  | 1000 
2 | 1  | 1   | 2   | 1  | 12000 
3 | 1  | 2   | 3   | 0  | 3000 
4 | 1  | 2   | 4   | 0  | 10 
5 | 2  | 1   | 2   | 0  | 100 
6 | 2  | 2   | 3   | 0  | 120 

我想寫下面查詢laravel4

SELECT fee_category.id 
, fee_category.Category 
, X.std_id 
, X.particularID 
, X.CategoryID 
, X.assign 
, X.amount 
FROM fee_category 
LEFT JOIN 
(SELECT * FROM fee_charge 
    WHERE fee_charge.std_id = 1 
    AND fee_charge.particularID = 1) AS X 
    ON x.CategoryID = fee_category.id 

我的嘗試是:

DB::table('fee_category') 
->leftJoin((function ($query) use ($std_id, $particularID) { 
    $query->DB::raw("(SELECT * FROM fee_charge 
     WHERE fee_charge.std_id = $std_id 
     AND fee_charge.particularID = $particularID) AS X" 
}), function($join) 
       {$join->on('fee_category.id', '=', 'X.CategoryID');}) 
->select('fee_category.id', 'fee_category.Category', 'X.std_id' 
, 'X.particularID', 'X.CategoryID', 'X.assign', 'X.amount', 'X.dateOfCharge', 'X.dueDate' 
) 
->get(); 

獲取誤差T_PAAMAYIM_NEKUDOTAYIM

回答

0

你爲什麼不使用ORM口才? https://laravel.com/docs/4.2/eloquent

您將擁有一個名爲「FeeCharges」的外推函數,其外鍵的ID爲「FeeCategory」。

在FeeCharges雄辯模型,把「屬於關聯」方法涉及外部鍵「類別ID」與模型,你必須以「CATEGORY_ID」重命名列。

在Laravel 4

public function category() { 

     return $this->belongsTo('FeeCategory'); 

    } 

所以,當我們會打電話給在FeeCharges模型中的 「類別」 的方法(例如FeeCharges ::查找(1) - >類),這將返回相關類別記錄。

建立你queryes會非常簡單,侃侃而談。 在你的情況,下面的例子中,將做的工作適合你:

$objects = FeeCharges::with('category') 
     ->whereRaw('std_id = '.$std_id.' and particularID ='.$particularID) 
     ->get(); 

就是這樣!