如何在eloquent中执行子查询?
我需要转换:
select * from(//complex sub query) as prds order by date desc
答案 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();