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 模型并使用它。