我已经找到了一些类似的主题,所以很抱歉,如果这是一种转发,但是我试图使用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);
哪个返回错误:“在数组上调用成员函数orderBy()”,因为它不是以雄辩的风格编写的。
谢谢
答案 0 :(得分:0)
尝试
$results = Ticket::where('user_id', Auth::user()->id)->where('state','!=',0)->where('state','!=',2)->orderBy("id", "desc")->paginate(3);
答案 1 :(得分:0)
您使用的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
模型而不是查询数据库表或创建WorkingOn
模型并使用它。