xPDO: некорректное определение типа поля в JOIN ON

Пользовательская таблица, имеет xPDO-схему без связей с другими таблицами:
<?xml version="1.0" encoding="UTF-8"?>
<model package="s" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" version="1.1">
        <object class="sRelations" table="sRelations" extends="xPDOSimpleObject">
                <field key="id1" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" index="index" />
                <field key="id2" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" index="index" />                
        </object>
</model>

Как видно по схеме, все поля имеют целочисленный тип.

Если пользовательскую таблицу join'ить к «modResource»:
$query = $modx->newQuery('modResource');
$query->select(array('modResource.id AS resourceId'));
$query->innerJoin('sRelations', 'sRelations', array('sRelations.id1:=' => 5));

то число 5 парсится как строка:
SELECT modResource.id AS resourceId
FROM `modx_site_content` AS `modResource`
JOIN `sRelations` `sRelations` ON `sRelations`.`id1` = '5'


Если же пользовательскую таблицу join'ить к самой себе:
$query = $modx->newQuery('sRelations');
$query->select(array('sRelations.id1 AS id1'));
$query->innerJoin('sRelations', 'sRelationsNew', array('sRelationsNew.id1:=' => 5));

то число 5 парсится как число (как и должно быть):
SELECT sRelations.id1 AS id1
FROM `sRelations` AS `sRelations`
JOIN `sRelations` `sRelationsNew` ON `sRelationsNew`.`id1` = 5

Вопрос: почему корректность определения типа поля «sRelations.id» пользовательской таблицы зависит от таблицы, к которой она join'иться?

— Если условие по любому полю присоединяемой пользовательской таблицы записать в WHERE, то наблюдается та же самая картина:
$query = $modx->newQuery('modResource');
$query->select(array('modResource.id AS resourceId'));
$query->innerJoin('sRelations', 'sRelations', array('sRelations.id = modResource.id'));
$query->where(array('sRelations.id2:=' => 8));

Получаем:
SELECT modResource.id AS resourceId
FROM `modx_site_content` AS `modResource`
JOIN `sRelations` `sRelations` ON sRelations.id = modResource.id
WHERE  `sRelations`.`id2` = '8'


Тип id2 определяется как строковый
Cyrax_02
02 мая 2015, 08:51
modx.pro
1
1 411
0

Комментарии: 1

Cyrax_02
02 мая 2015, 13:30
0
$query = $modx->newQuery('modResource');
$query->select(array('modResource.id AS resourceId'));
$query->innerJoin('modTemplateVarTemplate', 'TVValues', array('TVValues.contentid = modResource.id'));
$query->where(array('TVValues.tmplvarid:=' => 8));

Получаем запрос:
SELECT modResource.id AS resourceId
FROM `modx_site_content` AS `modResource`
JOIN `modx_site_tmplvar_templates` `TVValues` ON TVValues.contentid = modResource.id
WHERE `TVValues`.`tmplvarid` = '8'

Это нормально?
Почему-то xPDO не получает мета-информацию о присоединённых таблицах. В итоге все поля присоединённых таблиц он типизирует как строковые.

Получается, что создавать условия по присоединённым полям по стандартам xPDO (ассоциативный массив) нельзя — только на чистом SQL.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1