代码之家  ›  专栏  ›  技术社区  ›  Andreas Hunter

尝试获取按日期排序的行时结果不正确

  •  0
  • Andreas Hunter  · 技术社区  · 6 年前

    我有自定义代码让用户通过 updated_at 专栏:

    $customers = \App\Customer::whereHas('user', function ($query) {
       $query->orderBy('updated_at', 'DESC');
    })->get();
    

    表格方案:

     Schema::create('customers', function (Blueprint $table) {
        $table->increments('id');
        $table->unsignedInteger('user_id');
        $table->foreign('user_id')
              ->references('id')
              ->on('users')
              ->onDelete('cascade');
        $table->string('name')->nullable();
        $table->string('lastname')->nullable();
        $table->string('surname')->nullable();
        $table->text('about')->nullable();
        $table->timestamps();
    });
    

    你可以看到 here 查询结果。为什么我得到错误的结果或我的查询是不正确的?

    4 回复  |  直到 6 年前
        1
  •  0
  •   common sense    6 年前

    假设您想对客户进行分类,而不是 user 你必须使用的关系 orderBy Customer 结果:

    $customers = \App\Customer::whereHas('user')
                                ->orderBy('updated_at', 'DESC')
                                ->get();
    

    由于您不想订购不需要使用的用户 whereHas() . 简单的 has() 应该很好:

    $customers = \App\Customer::has('user')
                                ->orderBy('updated_at', 'DESC')
                                ->get();
    
        2
  •  0
  •   Bhoomi Patel    6 年前

    尝试此查询:

    $customers = \App\Customer::whereHas('user', function ($query) {
                 $query->orderBy('users.updated_at', 'DESC');
            })->get();
    
        3
  •  0
  •   Borisu    6 年前

    事实上,我怀疑你也在试图恢复这段关系。您需要紧急加载、订购和使用具有:

    $customers = \App\Customer::with(['user' => function ($query) {
       $query->orderBy('updated_at', 'DESC');
    })->whereHas('user')->get();
    

    这将获得关系并过滤掉所有没有用户的客户。

        4
  •  0
  •   John    6 年前

    试试这个查询,也许对你有用:

    $query = App\Customer::join('users as user', 'user.id', '=', 'customers.user_id')
                         ->orderBy('user.updated_at', 'desc')
                         ->select('customers.*')->get();