gpt4 book ai didi

php - Laravel 中首先按关系排序

转载 作者:行者123 更新时间:2023-12-02 20:07:29 24 4
gpt4 key购买 nike

我有两个表:admins 和 log_doctor_infos。 admins 表通过 doctor_id 与 hasOne 和 log_doctor_infos 有关系,如下所示。

在模型管理中:

public function logDoctorInfo() {
return $this->hasOne(LogDoctorInfo::class, 'doctor_id', 'id');
// Model LogDoctorInfo is log_doctor_infos table
}

在模型 LogDoctorInfo 中:

public function doctor(){
return $this->belongsTo(Admin::class, 'doctor_id', 'id');
// Model Admin is admins table
}

我从管理员表中获取所有数据,并且我想将与 log_doctor_infos 有关系的记录排序到顶部。

黄色记录,与log_doctor_infos有关系,我想将其排序在顶部。

编辑:我在此查询中使用分页,我真的想获得黄色记录的数量。

感谢您的阅读!

Example

在我的 Controller 中,我有自定义过滤器和分页。帮助我。

public function index(Request $request) {
$fullname = $request->query('fullname', NULL);
$phone = $request->query('phone', NULL);
$status = $request->query('status', NULL);

$doctors = (new Doctor)->newQuery();
if ($fullname != NULL) {
$doctors = $doctors->where('fullname', 'LIKE', '%'.$fullname.'%');
}
if ($phone != NULL) {
$doctors = $doctors->where('phone', 'LIKE', '%'.$phone.'%');
}
if ($status != NULL) {
$doctors = $doctors->where('status', $status);
}
$doctors = $doctors
// ->with(array('logDoctorInfo' => function($query) {
// $query->orderBy('updated_at', 'ASC');
// }))
->latest()
->paginate()
->appends([
'fullname' => $fullname,
'phone' => $phone,
'status' => $status
]);
// dd($doctors);
return view('admin.doctors.index', compact('doctors'));
}

最佳答案

您可以使用withCount方法。

Admin::withCount('logDoctorInfo')
->orderBy('log_doctor_info_count', 'desc')
->paginate(5);

您的 Controller 将如下所示

public function index(Request $request) {
$fullname = $request->input('fullname', NULL);
$phone = $request->input('phone', NULL);
$status = $request->input('status', NULL);

$doctorQuery = Doctor::query();
if ($fullname) {
$doctorQuery->where('fullname', 'LIKE', '%'.$fullname.'%');
}
if ($phone) {
$doctorQuery->where('phone', 'LIKE', '%'.$phone.'%');
}
if ($status) {
$doctorQuery->where('status', $status);
}
$doctorQuery->withCount('logDoctorInfo')
->orderBy('log_doctor_info_count');

$doctors = $doctorQuery->paginate()
->appends([
'fullname' => $fullname,
'phone' => $phone,
'status' => $status
]);
// dd($doctors);
return view('admin.doctors.index', compact('doctors'));
}

关于php - Laravel 中首先按关系排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54343023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com