下面是我的代码:
$search = request()->get('search');
if(Auth::user()->hasRole('admin') || true) {
list($orderBy, $orderDirection) = explode('.', request()->get('sort_by'));
$prestations = Prestation::with(
[
'service' => function($service) use($search){
$service->select(['id','name']);
->where('name', 'regexp', "/$search/i"); <--- HERE THE PROBLEM, i get some "null" values in the output, it's not a really condition to display or not
},
'facility' => function($facility) {
$facility->select(['id','name']);
}
]
)
->where('name', 'regexp', "/$search/i") <-- I want to do this with service name
->orderBy($orderBy, $orderDirection)
->simplePaginate(50);
$res = [
'results' => $prestations,
'total' => Prestation::all()->count(),
];
return $res;我想对我的'service:name‘做一个where条件,它确实会影响输出,并且不会像->where('name', 'regexp', "/$search/i")那样显示值为"null“的数据,但我不知道如何访问"with”关系的"service:name“。
谢谢,祝你新年快乐!
发布于 2020-01-02 18:09:05
您可以使用LIKE运算符执行此操作:
$prestations = Prestation::with(
[
'service' => function($service) use($searchTerm){
$service->select(['id','name'])->where('name', 'LIKE', "%$searchTerm%");
},
]
)->orderBy($orderBy, $orderDirection)->simplePaginate(50);如果要搜索包含搜索词的记录,请使用LIKE '%$searchTerm%'
LIKE '$searchTerm%'
LIKE '%$searchTerm';如果要搜索包含搜索词的记录,请使用
希望这能帮到你
发布于 2020-01-02 18:40:17
您可以使用whereHas来完成此操作
$prestations = Prestation::whereHas('service', function($subQuery) use($search) {
$subQuery->where('name', 'like', '%' . $search . '%');
})->with(
[
'service' => function($service) use($search){
$service->select(['id','name'])->where('name', 'like', '%' . $search . '%');
},
]
)->orderBy($orderBy, $orderDirection)->simplePaginate(50);https://stackoverflow.com/questions/59561378
复制相似问题