Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Доброго времени суток уважаемые!
Пишу фильтр по нескольким критериям.
//заводим пустой запрос
$query = Profile::query();
//наполняем его по мере необходимости
if ($request->input('pack') && $request->input('pack') != 0) {
$query = $query->where('company_pack', '=', $request->input('pack'));
}
if ($request->input('qualification') && $request->input('qualification') != 0) {
$query = $query->where('company_status', '=', $request->input('qualification'));
}
//вот тут у меня проблема...
//Имя Фамилия искомого вводятся через одно поле (один тег)
if($request->input('name') !== Null){
//если вообще хоть что-то введено
$user_name = explode(' ',$request->input('name'));
//разбиваем полученную строку на элементы
if(count($user_name) > 0){
//имеется хотя бы 1 элемент (Имя)
//echo 'user name '.$user_name[0].' filter<br/>';
$name = $user_name[0];
//а вот эта фильтрация по отношению НЕ РАБОТАЕТ
$query = $query->with(['user' => function($query) use ($name)
{
$query->where('name', 'like', '%'.$name.'%');
}]);
if(count($user_name) > 1){
... имеется еще и фамилия....
}
}
}
$data = $query->get();
Интересно, что реализация через Join работает прекрасно, но в этом случае недоступна пагинация... которая нужна.
Не в сети
$data = $query->toSql();
var_dump($data);
выдает:
string(132) "select * from `profiles` inner join `users` on `users`.`id` = `profiles`.`user_id` and `users`.`name` like ? where `sponsors` like ?"
Вместо значений переменных стоят знаки вопроса (?)
$data = $query->getBindings();
var_dump($data);
returned array(2) { [0]=> string(7) "%Vanya%" [1]=> string(4) "%19%" }
Изменено Dzhangar (11.02.2017 19:10:46)
Не в сети
$name = $user_name[0];
$query = $query->with(['user' => function($q) use ($name){
$q->where('name', 'like', '%'.$name.'%');
}]);
просто добавляет к выходному массиву данных таблицу Users (соотвественно указанному отношению), но предложение where не исполняется....
Не в сети
фильтрация работает только в виде:
$name = $user_name[0];
$query = $query->join('users', function ($join) use ($name) {
$join->on('users.id', '=', 'profiles.user_id')
->where('users.name', 'like', '%'.$name.'%');
});
при этом, производится корректная выборка только для русских (киррилических) имен.
Например, Иван - находится прекрасно, Vanay - возвращает пустой массив... забавно при том, что используется кодировка utf8-general-ci
Не в сети
кстати, я оказался неправ насчет пагинации.... прекрасно работает при join'e
Не в сети
потому что джойн выполняется на одну запись. если джойнить по отношениям многие-ко-многим или один-ко-многим (со стороны где один) – limit/offset будет применяться к отдельным рядам, а поскольку на одну запись могут вернуться несколько рядов – сам понимаешь что получится
Не в сети
Страницы 1