Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
идет запрос в базу через ajax
$new_symbol = DB::table('photo')
->where('photo_symbol_id', $symbol_id)
->where('photo_sex_id', $array_properties['sex'])
->whereNotIn('photo_id', array($photo_id))
->orderByRaw('RAND()')
->take(1)
->get(['photo_id', 'photo_src', 'photo_symbol_id']);
и если он возвращает пустой результат, то ловлю исключение
ErrorException in CompgenReplace.php line 24:
Undefined offset: 0
как сделать так, что бы вместо исключения просто выдать alert("Символ не найден!")
Не в сети
Ну в методе PHP-шном поставить корректный возврат в случае, если результат - пустой. Как-то так:
if (!$new_symbol) {
return 'Запись не найдена';
}
Или я не так что-то понял?
Не в сети
if (!$new_symbol) {
throw new \Exception('Запись не найдена');
}
$.ajax({
error: function (answer) {
alert('символ не найден');
}
});
Изменено covobo (08.12.2016 20:02:17)
Не в сети
Это более кошерно
Не в сети
а как сделать следующее, допустим у меня есть еще некоторые параметры, которые могут быть равны нулю или их ID в базе. Если они не равны нулю, то добавить их в условие where
if($array_properties['sex'] == 0)
$sex = '';
else
$sex = $array_properties['sex'];
$photo_id = (int)$arr_img['photo_id'];
try{
$new_symbol = DB::table('photo')
->where('photo_symbol_id', $symbol_id)
->where('photo_sex_id', $sex)
->whereNotIn('photo_id', array($photo_id))
->orderByRaw('RAND()')
->take(1)
->get(['photo_id', 'photo_src', 'photo_symbol_id']);
так не срабатывает
Изменено respectpick (09.12.2016 15:35:38)
Не в сети
Не совсем понятно... Условие where, оно в любом случае отработает, зачем из него что-то исключать таким остроумным способом?... Уж если это делать, так в самом условии. Это во-первых.
Во-вторых, Ваш код написан таким образом, что 'sex', при любом значении, попадает в условие.
Посмотрите, if у Вас где заканчивается? То-то.
Не в сети
Не совсем понятно... Условие where, оно в любом случае отработает, зачем из него что-то исключать таким остроумным способом?... Уж если это делать, так в самом условии. Это во-первых.
Во-вторых, Ваш код написан таким образом, что 'sex', при любом значении, попадает в условие.
Посмотрите, if у Вас где заканчивается? То-то.
ну да, т.е. как бы нужно если есть $sex, то добавлять его во where, если нет, то не добавлять
просто не хочется писать что-то типа такого
if($array_properties['sex'] == 0){
$new_symbol = DB::table('photo')
->where('photo_symbol_id', $symbol_id)
->whereNotIn('photo_id', array($photo_id))
->orderByRaw('RAND()')
->take(1)
->get(['photo_id', 'photo_src', 'photo_symbol_id']);
}else{
$new_symbol = DB::table('photo')
->where('photo_symbol_id', $symbol_id)
->where('photo_sex_id', $array_properties['sex']
->whereNotIn('photo_id', array($photo_id))
->orderByRaw('RAND()')
->take(1)
->get(['photo_id', 'photo_src', 'photo_symbol_id']);
}
а помимо указания sex есть еще куча других свойств, нужно при их наличии добавлять к where
Изменено respectpick (09.12.2016 16:15:05)
Не в сети
Я еще раз повторю, что нет необходимости предварительно отбирать значения для where. На этот случай в SQL существует "AND". Вы и здесь это применяете, неявно, например:
>where('photo_symbol_id', $symbol_id)
->where('photo_sex_id', $array_properties['sex']
->whereNotIn('photo_id', array($photo_id))
Ну и допишите к этому набору еще одно where, где sex не равно 0. И другие можно также записать.
Или у Вас формируется запрос, исходя из условий? Вы что, параметрический поиск пишете?
Изменено Androbim (09.12.2016 16:29:22)
Не в сети
если выполнится
->where('photo_sex_id', $array_properties['sex']
когда там 0, то mysql вернет пустой результат, а мне нужно что бы если там 0, то это where вообще не рассматривалось, даже не участвовало в запросе
Не в сети
Ну, я понял. Таки поиск?
Скажу так. Когда-то сам делал, примерно так, как Вы тут написали, но, кажется, использовал switch. Не элегантно, не спорю, хотя число параметров и вариантов было невелико, и система работала. Может, есть и получше решения.
Не в сети
Ну, я понял. Таки поиск?
Скажу так. Когда-то сам делал, примерно так, как Вы тут написали, но, кажется, использовал switch. Не элегантно, не спорю, хотя число параметров и вариантов было невелико, и система работала. Может, есть и получше решения.
слишком сложно, у меня 6 параметров. Причем придется рассматривать варианты когда есть все 6 параметров, когда их нет, когда есть 3й и 5й, а остальных нет и тд.
Не в сети
$queryBuilder = DB::table('photo')
->where('photo_symbol_id', $symbol_id)
->whereNotIn('photo_id', array($photo_id))
if ($array_properties['sex']) {
$queryBuilder->where('photo_sex_id', $array_properties['sex']);
}
if (..some_request_params) {
$queryBuilder->where(...);
}
$new_symbol = $queryBuilder
->orderByRaw('RAND()');
->take(1)
->get(['photo_id', 'photo_src', 'photo_symbol_id']);
Пока копировал ваш запрос - возможно пропустил что-то.
Но смысл в том, чтобы ->get делать в конце, и добавить, по надобности, разные условия фильтрации для $queryBuilder
Изменено covobo (09.12.2016 17:38:08)
Не в сети
Я в сети посмотрел - есть решения, посвященные реализации поиска на Laravel. И на этом сайте тоже такая имеется, хоть и полнотекстовый.
Создание полнотекстового поиска в Laravel
Изменено Androbim (09.12.2016 17:44:30)
Не в сети
Страницы 1