[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: QueryBulder(Doctrine 2)
Max_SLON
Летит значит переменная в symfony контроллер.
$.post("index.php/next",{id:$("#id3").text()*1});

В контроллере подхватывается код
-----------------------------------------------
$id=$_POST['id'];
$string = 'p.id < '.$id.' AND p.id > '.$id1;
$repository = $this->getDoctrine()
->getRepository('AcmeStoreBundle:news');
$query = $repository->createQueryBuilder('p')
->where($string)
->orderBy('p.id', 'DESC')
->getQuery();

$product = $query->getArrayResult();
------------------------------------------------
Всё ништяг!:))
НО! Летим так! В итоге Ошибка!
$.post("index.php/next",{id:$("#id3").text()});
---------------------------------------------------
$id=$_POST['id'];
$string = 'p.id < '.$id.' AND p.id > '.$id1;
$repository = $this->getDoctrine()
->getRepository('AcmeStoreBundle:news');
$query = $repository->createQueryBuilder('p')
->where($string)
->orderBy('p.id', 'DESC')
->getQuery();

$product = $query->getArrayResult();
-----------------------------------------------------
Самое интересно, что и в том и другом случае функция gettype($id) сообщает string
Переменная $id1 где то там выше шпарит в расчет её не берем. laugh.gif
Как так?))
Игорь_Vasinsky
$id=(int)$_POST['id'];


или лучше сразу на клиенте привести к типу явно.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Max_SLON
smile.gif
Ребята!Вы смеетесь что ли!
$("#id3").text()*1
Что это по вашему.
Вся суть вопроса, что стринг идет в обоих вариантах!Вся соль вопроса: почему Doctrine 2 так ведет себя с string.string=string, но c string.int=string всё ок!))
Игорь_Vasinsky
явное приведение к типу.

ничего смешного не вижу.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Max_SLON
В моем случае приведение к типу вот $("#id3").text()*1
Вопрос в другом:
Посылаю переменную в типе string
Принимаю переменную в типе string
Соединяю строки
Передаю результат соединения в where (doctrine 2) (тут явно тип string на подаче)!Если не верим, можем проверить gettype(переменная).
Не пашет!

Передаю переменную в типе int
Принимаю переменную в типе int
Соединяю строку и принятую переменную
Передаю результат соединения в where (doctrine 2) (тут тоже явно тип string на подаче)!
Пашет!

Где правда? В where мы пишем допустим вот так 'p.id>3' ведь это строка?верно это строка. А приведение к типу у меня изначально было. Зачем советовать, то что уже есть и не требует разъяснений.
Игорь_Vasinsky
ээээ. не шпарь.

Цитата
Самое интересно, что и в том и другом случае функция gettype($id) сообщает string


Цитата
Передаю переменную в типе int
Принимаю переменную в типе int


я вижу что не так. но я тебя спрошу - что не так?

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Max_SLON
https://drive.google.com/file/d/0B1SCB8fwlX...dit?usp=sharing
В обоих случаях выхлоп вот такой.(т.е. строка в любом случае при объединение) Пример не относится к задаче, но он показывает, что строка в любом случае.
Функция where ведет себя как то странно.
Почему не работает where(string.string)
Max_SLON
Ладно не стоит эту фигню копать. Наверняка какая то путаница. Надо ещё копнуть реализацию функций. Мне кажется в той стороне камень зарыт.
Всё равно Bulder юзать не буду.
DQL через репозиторий верный путь.
Единственное, что хорошо это не надо конектится к базе вручную. Пусть этим займется Doctrine 2 и можно сосредоточиться на SQL запросах. Остальное вата.
Хотя стоп насчет конекта погнал
$r = $this->getDoctrine()
->getRepository('AcmeStoreBundle:news');
Хотя я бы лишний раз include написал, чем эту хренатень. Так что пахнет все ватой.
В фрейворке только 3 вещи нравятся действительно стоящие: это routing, единый класс контроллер, рендеринг для подачи в twig. Остальное как то не ОК!
Игорь_Vasinsky
какая разница с чем работать. вопрос в типе данных.

в скрине - я к=увидел строку, но как я понял - ожидалось число

в итоге я не понял.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Max_SLON
хм. Ожидалась строка!
Советую пробнуть. Сделать, то что было эксперементально проверено мной.
kaww
Max_SLON, хотя бы текст ошибки показал. Но судя по всему ты просто забыл про кавычки и запросы вида where 'p.id > ' . '10' работают а 'p.id > ' . 'text' - нет. Вообще лучше не клеить руками запрос а поручить это доктрине, которая сама сделает эскейпинг и т.д. :

$queryBuilder->where('p.id <> :id')->setParameter('id', $request->request->get('id'));
Max_SLON
Согласен с вами. Я вообще queryBuilder исключил из работы и ушел в DQL(намного удобнее и старины побольше).
А надвеска queryBuilder ни к чему.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.