Мой код;
$posts=Term::where('user_id',$user_id)->where('status',1)->where('type','product')->with('preview','attributes','category','price','options','stock','affiliate')->withCount('reviews');
if(!empty($request->term)){
$data= $posts->where('title','LIKE','%'.$request->term.'%');
}
Этот мой код ищет заголовок из таблицы терминов. Но я хочу искать из другой таблицы, не нарушая структуру. Итак, пример;
if(!empty($request->term)){
$data= $termTABLE->where('title','LIKE','%'.$request->term.'%');
$data= $stockTABLE->where('code','LIKE','%'.$request->term.'%');
}
Поскольку я ничего не знаю о Laravel, я не мог объяснить его полностью. Я надеюсь, что получу помощь. Спасибо.
Удачи
2 ответа
Приведенный ниже пример не похож на ваш, но вы можете отсортировать его в соответствии с вашими потребностями.
Например, если у пользователя есть компания, вы можете выполнить поиск в таблице компаний, например
$user->where('name', 'LIKE', '%' . $searchPhrase . '%') //Searching in user table
//Searching in user table
->orWhere('email', 'LIKE', '%' . $searchPhrase . '%')
//Checking if company exist
->orWhereHas('company', function ($query) use ($searchPhrase) {
//Searching in company table
$query->where('name', 'LIKE', '%' . $searchPhrase . '%');
});
Я думаю, ты пытаешься фильтровать свои отношения? Если это так, это делается путем передачи обратного вызова методу with()
:
$posts = Post::where('user_id', $user_id);
->where('status',1)
->where('type','product')
->where('title', 'like', '%' . $request->input('term') . '%')
->with('preview', 'attributes', 'category', 'price', 'options', 'affiliate')
->with([
'stock' => fn ($q) => $q->where('code', 'like', '%' . $request->input('term') . '%')
])
// optional, see note below
->whereHas('stock', fn ($q) => $q->where('code', 'like', '%' . $request->input('term') . '%'))
->withCount('reviews');
Итак, мы удалили отношение stock
из списка и поместили его в собственный вызов with()
с обратным вызовом, который будет фильтровать возвращаемое.
Обратите внимание, что нет необходимости проверять, имеет ли поле запроса значение, так как LIKE %%
вернет все записи.
Если вы хотите, чтобы возвращались только сообщения с совпадающими отношениями, добавьте вызов whereHas()
, который в первую очередь обеспечит наличие желаемых отношений. Чтобы уточнить:
Post::with('stock')
возвращает все посты со всеми акциямиPost::with('stock', 'some condition')
возвращает все посты с некоторыми акциямиPost::whereHas('stock', 'some condition')
возвращает несколько постов со всеми акциямиPost::whereHas('stock', 'some condition')->with('stock', 'some condition')
возвращает несколько постов с некоторыми акциями.
Похожие вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.
$termTABLE
и$stockTABLE
в этом псевдокоде?