我有自定义代码,可让用户按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查询结果。为什么我得到错误的结果或我的查询不正确?
答案 0 :(得分:0)
假设您要对客户而不是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();
答案 1 :(得分:0)
尝试此查询:
$customers = \App\Customer::whereHas('user', function ($query) {
$query->orderBy('users.updated_at', 'DESC');
})->get();
答案 2 :(得分:0)
实际上,我怀疑您也在尝试按顺序检索该关系。您需要急于加载,订购并使用has:
$customers = \App\Customer::with(['user' => function ($query) {
$query->orderBy('updated_at', 'DESC');
})->whereHas('user')->get();
这应该获得关系并过滤掉所有没有用户的客户。
答案 3 :(得分:0)
尝试此查询,也许它对您有用:
$query = App\Customer::join('users as user', 'user.id', '=', 'customers.user_id')
->orderBy('user.updated_at', 'desc')
->select('customers.*')->get();