1

Тема: Propel - или как из пушки убить муху. Вопросы.

Я, например, сохраняю запись после редактирования. Алгоритм получается такой

$exemplar = ClassPeer::retrieveByPk($this->getRequestParameter('exemplar_id'));
$exemplar->setParam($this->getRequestParameter('exemplar_param'));
$exemplar->save();

В этом алгоритме к базе данных идёт два запроса - первый для получения экземпляра объекта, второй - для его сохранения.
Хотя, по логике нужен только один.

И вторая проблема - связана с отложенной загрукой данных из БД. Например, мне не нужна вся запись, которая "весит" под 50кб. Мне нужен только id этой записи. Но с классическим подходом мне нужно получить всю запись из БД чтобы получить одно поле. Может можно как-то прописать lazy load для "ненужных полей" или вовсе отменить их загрузку?

В обоих случаях, по моему разумению, напрасно увеличивается нагрузка на БД.

кто что думает по данному вопросу?

Отредактировано Agatov (2008-10-07 21:40:04)

2

Re: Propel - или как из пушки убить муху. Вопросы.

вручную пишите запросы.
Propel не панацея!

Если что-то не работает - очисти кэш.

3

Re: Propel - или как из пушки убить муху. Вопросы.

2Agatov, именно поэтому я потихоньку изучаю Doctrine - там все о чем Вы говорите есть. Тем более в 1.2 будет Doctrine офф ORM`ом наряду с Propel`ом.

4

Re: Propel - или как из пушки убить муху. Вопросы.

ruFog - не думаю, что там много прям слишком изучать. Не учил только потому, что слышал, будто пользоваться пропелом удобнее.

В добавок - пользуюсь несколькими плагинами, которые поддерживают пропел. При переходе придётся чем-то это дело заменять.

Отредактировано Agatov (2008-10-09 13:22:27)

5

Re: Propel - или как из пушки убить муху. Вопросы.

pentium133 пишет:

вручную пишите запросы.
Propel не панацея!

А есть ли в пропеле конструктор запросов?
(Я новичок)

6

Re: Propel - или как из пушки убить муху. Вопросы.

пропел это и есть конструктор запросов

7

Re: Propel - или как из пушки убить муху. Вопросы.

да есть http://propel.jondh.me.uk/criteria/analyse

Если что-то не работает - очисти кэш.

8

Re: Propel - или как из пушки убить муху. Вопросы.

Propel позволяет сделать выборку по нужным полям, нужно:     $c->clearSelectColumns(); А далее добавить те поля, которые нужны для выборки.

И к тому же обновляются только те поля, которые изменились, а не все данные default/smile. Так что Propel позволяет реализовать всю необходимую логику.

9

Re: Propel - или как из пушки убить муху. Вопросы.

Честно говоря, скудность документации по Propel - главный его недостаток. Чтобы понять, что он поддерживает, а что нет - лучше пару дней покопаться в его коде, поэкспериментировать. И тогда выходит, что он не так уж и плох default/smile.

Отредактировано Agatov (2008-10-19 12:25:51)

10

Re: Propel - или как из пушки убить муху. Вопросы.

$c->clearSelectColumns()
$c->addSelectColumn(SomePeer::ONE_COLUMN);

return SomePeer::doSelect($c);

В итоге пропел ругается, что ему выбраны не все значения ( в методе hydrate всем полям обязательно должно присвоится значение, а если его нету то появляется предупреждение об отсутствующем индексе ).

опять писать свои дополнительные методы? )))

11

Re: Propel - или как из пушки убить муху. Вопросы.

У меня такая же проблема - хочу выбрать только 1 поле из таблицы, ошибка происходит при hydrating.
Как можно осуществить задуманное?

12

Re: Propel - или как из пушки убить муху. Вопросы.

прорель выбирает все поля.
если надо одно - напиши обычный sql

Если что-то не работает - очисти кэш.

13

Re: Propel - или как из пушки убить муху. Вопросы.

Хм, странно, у меня получалось Пропелом доставать ограниченное кол-во полей. Возможно, обязательно должно вытягиваться поле с айдишником...
Если надо будет, напишите, я по приезду на работу могу скинуть кусок моего рабочего кода, который это делает.

Этикет - это разум для тех, кто его не имеет (с)Вольтер

14

Re: Propel - или как из пушки убить муху. Вопросы.

а можна сделать так???
я делаю пропелом запрос, но не хочу шоб данные записывались в базу данных а вывелся мне сам запрос sql, ну к примеру как переменная в FirePHP (это дебаггер для мазилы)...
! не использовать $user->save(); а шота другое, которое даст мне 'INSERT ...' или 'UPDATE ...'

Отредактировано Sergic (2009-01-04 21:42:03)

15

Re: Propel - или как из пушки убить муху. Вопросы.

для этого у Criteria есть метод toString()

Если что-то не работает - очисти кэш.

16

Re: Propel - или как из пушки убить муху. Вопросы.

не знаю как использовать это к вот этому
$user = new User();
$user->setUsername($this->getRequestParameter('username'));
$user->setPassword($this->getRequestParameter('password'));
...
$user->save();
критерия ведь для выборки объектов

17

Re: Propel - или как из пушки убить муху. Вопросы.

ешо один вопрос: по запросам в бд
есть компонента в ней выводиться инфа типо
$this->userinfo = $this->getUser()->getUserInfo(); (в классе  User там исполняется запрос к бд)
но вот у мня попался екшен, который тоже исполняет аналогичный запрос, и тут получается, что у мня выполняются два идентичных запроса подряд... можно ли использовать как-то данные из компоненты? точнее выйти на вот это $this->userinfo с екшена

Отредактировано Sergic (2009-01-10 00:46:11)

18

Re: Propel - или как из пушки убить муху. Вопросы.

Сделай в sfUser переменную. А в getUserInfo() проверяй - если она инициализирована - возвращай инфу без запроса иначе делай запрос и записывай результат в переменную.
Есть еще другие способы типа кеширование результатов выполнения функций и прочее....

Если что-то не работает - очисти кэш.

19

Re: Propel - или как из пушки убить муху. Вопросы.

супер, спасибо default/smile работает на ура

20

Re: Propel - или как из пушки убить муху. Вопросы.

$rs  = self::doSelectRS($c);

строка возвращает результат для обработки в

while ($rs->next()) {
}

теперь как мне проверить находит ли какие-то строки doSelectRS? ато на проверку
if ($rs) всегда проходит... а если делать if ($rs->next()) выходят глюки...