Laravel Eloquent 中的子查询
Subquery in Laravel Eloquent
我发现了一些类似的主题,所以如果这是一种转贴,我很抱歉,但我正在尝试使用 Laravel 在 Eloquent 中编写此查询,以便我可以分页但坦率地说,这让我感到困惑……
任何人都可以伸出援手吗?
查询如下:
$results = DB::select(
'SELECT * FROM tickets WHERE id IN '.
'(SELECT ticket_id FROM working_on WHERE user_id ='.Auth::user()->id.
' AND NOT state=0 AND NOT state=2)'
) -> orderBy("id", "desc") -> paginate(3);
其中 returns 一个错误:“调用数组上的成员函数 orderBy()”,因为它不是以 Eloquent 风格编写的。
谢谢
试试这个
$results = Ticket::where('user_id', Auth::user()->id)->where('state','!=',0)->where('state','!=',2)->orderBy("id", "desc")->paginate(3);
您使用的 select
有误。 select
方法接受列名作为参数。如果你不使用原始表达式也是最好的,因为那样做,你就失去了 Laravel 的转义。相反,您应该利用 Laravel 的查询构建器。
它应该看起来像这样:
DB::table('tickets')
->select('*')
->whereIn('id', function($query) {
$query->select('ticket_id')
->from('working_on')
->where('user_id', Auth::user()->id)
->whereNotIn('state', [0, 2]);
})->orderByDesc('id')
->paginate(3);
顺便说一下,第一个 select
是多余的,因为 *
是默认值。
此外,考虑直接查询 Ticket
模型而不是数据库 table 或创建 WorkingOn
模型并使用它。
我发现了一些类似的主题,所以如果这是一种转贴,我很抱歉,但我正在尝试使用 Laravel 在 Eloquent 中编写此查询,以便我可以分页但坦率地说,这让我感到困惑…… 任何人都可以伸出援手吗?
查询如下:
$results = DB::select(
'SELECT * FROM tickets WHERE id IN '.
'(SELECT ticket_id FROM working_on WHERE user_id ='.Auth::user()->id.
' AND NOT state=0 AND NOT state=2)'
) -> orderBy("id", "desc") -> paginate(3);
其中 returns 一个错误:“调用数组上的成员函数 orderBy()”,因为它不是以 Eloquent 风格编写的。
谢谢
试试这个
$results = Ticket::where('user_id', Auth::user()->id)->where('state','!=',0)->where('state','!=',2)->orderBy("id", "desc")->paginate(3);
您使用的 select
有误。 select
方法接受列名作为参数。如果你不使用原始表达式也是最好的,因为那样做,你就失去了 Laravel 的转义。相反,您应该利用 Laravel 的查询构建器。
它应该看起来像这样:
DB::table('tickets')
->select('*')
->whereIn('id', function($query) {
$query->select('ticket_id')
->from('working_on')
->where('user_id', Auth::user()->id)
->whereNotIn('state', [0, 2]);
})->orderByDesc('id')
->paginate(3);
顺便说一下,第一个 select
是多余的,因为 *
是默认值。
此外,考虑直接查询 Ticket
模型而不是数据库 table 或创建 WorkingOn
模型并使用它。