Я использую Propel 2. У меня проблема с условиями соединения. Из-за этого я не могу получить данные с помощью Propel API, и я вынужден использовать простой SQL с PDO. Вот моя структура таблицы:Используйте только одно условие соединения в Propel
<table name="categories" phpName="Categories">
<column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
<column name="parent_id" type="integer" required="true" defaultValue="0"/>
<column name="root_id" type="integer" required="true" defaultValue="0"/>
<column name="redirect_id" type="integer" required="false" defaultValue="null"/>
<column name="name" type="varchar" size="255" required="true" defaultValue=""/>
<column name="status" type="char" sqlType="enum('active','deleted','disabled')" required="true" defaultValue="active"/>
<foreign-key foreignTable="categories" phpName="Categories">
<reference local="parent_id" foreign="id"/>
<reference local="redirect_id" foreign="id"/>
</foreign-key>
<vendor type="mysql">
<parameter name="Engine" value="InnoDB"/>
<parameter name="Charset" value="utf8"/>
</vendor>
</table>
Я хочу использовать следующий SQL:
SELECT c.id, c.name
FROM categories c
LEFT JOIN categories p ON c.parent_id = p.id
WHERE c.status = 'active' AND p.status = 'active' AND c.name LIKE '%Laptop%'
Propel генерируемых методы модели я использую:
$categories = CategoriesQuery::create('c')
->filterByName("%{$name}%")
->filterByStatus('active')
->useCategoriesQuery('p')
->filterByStatus('active')
->endUse()
->find();
Таким образом, генерируется SQL всегда имеет два условия соединения LEFT JOIN categories p ON (categories.parent_id=p.id AND categories.redirect_id=p.id)
. Я пробовал использовать join()
, addJoin()
с where()
и т. Д. Ничто не помогает. Очевидно, проблема в моих знаниях о Propel.