在eloquent中执行子查询?

时间:2015-09-16 13:28:11

标签: laravel laravel-5 eloquent

如何在eloquent中执行子查询?

我需要转换:

select * from(//complex sub query) as prds order by date desc

2 个答案:

答案 0 :(得分:1)

在没有特定的表格,列等的情况下回答这个问题很棘手。但一般来说,做这种事情的关键是你可以传递一个函数作为def update_2(): c.execute( """SELECT totalscore FROM scores""" ) c.execute( """UPDATE scores SET totalscore = ? + 2 WHERE id = (SELECT max(id) FROM scores)""", (str(tscore)) ) 的第二个参数或whereIn(),这将创建一个子查询。例如:

whereExists()

或者您可以使用whereIn()这样做:

Products::whereExists(function ($query) {
   $query->select(DB::raw(1))->from('orders')
      ->whereRaw('orders.product_id = products.id');
})->get();

答案 1 :(得分:1)

首先创建您需要的子查询

$subQuery = DB::table("some_table as s")
    ->select('s.name', DB::raw('count(s.id) as s_count'))
    ->join('other_table as o', 's.id', '=', 'o.val')
    ->where('o.values', $someVal)
    ->groupBy('s.name');

可以创建一般查询

$rows = DB::table(DB::raw("({$subQuery->toSql()}) as sub"))->mergeBindings($subQuery)
    ->where('sub.name', $val)
    ->orderBy("sub.s_count", 'asc')
    ->get();

如果需要,你也可以计算

$count = DB::table(DB::raw("({$subQuery->toSql()}) as sub"))->mergeBindings($subQuery)
    ->where('sub.name', $val)
    ->count();