使用左连接的Laravel子查询

时间:2016-07-01 07:40:24

标签: laravel laravel-4

如何使用laravel4

编写下面的mysql查询

有两张桌子 表1是fee_category,其中包含字段:

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

表2是带字段的费用:

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

获取错误

1 个答案:

答案 0 :(得分:0)

为什么不使用Eloquent ORM? https://laravel.com/docs/4.2/eloquent

您将拥有一个名为“FeeCharges”的口才,其外键的ID为“FeeCategory”。

在FeeCharges eloquent模型中,使用“belongsTo”方法将外键“CategoryID”与模型相关联,您必须使用“category_id”重命名该列。

在Laravel 4中

    public function category() {

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

    }

因此,当我们在FeeCharges模型中调用“类别”方法时(例如,FeeCharges :: find(1) - >类别),这将返回相关的类别记录。

用雄辩的方式构建你的查询将非常简单。 在您的情况下,下面的示例将为您完成工作:

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

就是这样!