Propel ORM - ВЫБРАТЬ ... ГДЕ col1 = col2 - PullRequest
0 голосов
/ 22 ноября 2010

Я пытался перенести проект, над которым я работаю, на PropelORM .Пока все отлично.

Однако у меня возникли проблемы с древовидной структурой, которую мы настроили в одной из наших таблиц.

В значительной степени, если ID = PARENTID, то этокорень.например.

ID | NAME | PID
0  | ZERO | 0  
1  | ONE  | 1  
2  | TWO  | 1  
3  | THREE| 3  

Один и два на самом деле являются корнями.

Я пробовал что-то подобное

$res_crit = new Criteria();  
$res_crit->add(PropertyTypePeer::ID, PropertyTypePeer::CONVERTEDID, Criteria::EQUAL);  
$result = PropertyTypePeer::doSelect($res_crit, Propel::getConnection('system'));  

, но он возвращает только одну строку, где ID = 0 иparent id = 0.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 22 ноября 2010

Вам нужно использовать пользовательские критерии для выполнения такого запроса с помощью propel:

$res_crit->add(PropertyTypePeer::ID, PropertyTypePeer::ID.' = '.PropertyTypePeer::CONVERTEDID, Criteria::CUSTOM);

Пользовательские критерии позволяют вам писать собственный код в предложении WHERE. В таком случае первый аргумент Criteria # add не имеет значения (он вообще не будет использоваться propel), но мы добавляем столбец, к которому мы обращаемся для удобства чтения.

0 голосов
/ 30 августа 2012

А как же

$res_crit->where(PropertyTypePeer::ID.' = '.PropertyTypePeer::CONVERTEDID);

По крайней мере, меньше писать и кажется более читабельным.

Работал для меня по довольно сложным критериям.

ПРИМЕЧАНИЕ: $criteria->where(), объединяет условия через AND.

Если вам нужно объединить пользовательские критерии с помощью OR, вам нужно использовать $criteria->orWhere().

...