У меня простой вопрос: я использовал django, а теперь перешел на laravel и застрял в нем на 2 дня
у меня есть форма на странице индекса, которая будет отправлять данные на страницу поиска работы
Раньше я делал это в django, но здесь он не работает
public function job_search(Request $request) {
$keyword = $request->get('keywords');
$location = $request->get('location');
if ($keyword) {
$jobs = Job::where('name', 'like', '%'.$keyword.'%');
if ($location) {
$jobs = Job::where('location', 'like', '%'.$location.'%')->where('name', 'like', '%'.$keyword.'%');
}
}
if ($location) {
$jobs = Job::where('location', 'like', '%'.$location.'%');
}
return view('jobs.job_search', compact('jobs','keyword','location'));
}
спасибо в следующий раз, пожалуйста, ответьте, чтобы получить голоса






У вас возникла проблема не добавить ->get() в конце. Вы просто строите запрос. Имея это в виду, ваш код должен быть:
$jobs = Job::where('location', 'like', '%'.$location.'%')->get();
вы перезаписываете результат задания, если присутствуют и ключевые слова, и местоположение. попробуй вот так
public function job_search(Request $request) {
$keyword = $request->keywords;
$location = $request->location;
$q = new Job;
if ($keyword) {
$q->where('name', 'like', '%'.$keyword.'%');
}
if ($location) {
$q->where('location', 'like', '%'.$location.'%');
}
$jobs = $q->get();
return view('jobs.job_search', compact('jobs','keyword','location'));
}
Я бы принял этот ответ как правильный, поскольку он объясняет немного лучше, чем мой, и дает вам более чистый код
Для получать() вы извлекаете все строки, которые соответствуют предложениям where. (Обратите внимание, что для доступа ко всем строкам требуются циклы, иначе возникнут ошибки).
если вы ищете конкретные данные, как в предложении where: Модель :: where ('поле', '=', 'значение') -> get ();
вы не используете -> get ()
public function job_search(Request $request) {
$keyword = $request->get('keywords');
$location = $request->get('location');
if ($keyword) {
$jobs = Job::where('name', 'like', '%'.$keyword.'%')->get();
if ($location) {
$jobs = Job::where('location', 'like', '%'.$location.'%')->where('name', 'like', '%'.$keyword.'%')->get();
}
}
if ($location) {
$jobs = Job::where('location', 'like', '%'.$location.'%')->get();
}
return view('jobs.job_search', compact('jobs','keyword','location'));
}
Вы не получаете никаких результатов. Добавьте
->get()после вашегоwhere.