Подскажите, как правильно заджойнить таблицы через pdoResources
Привет, есть простая модель projects и класс categories. В табице класса хранятся только названия категорий.
id | name
Для ресурсов через TV сохраняются id категорий.
Нужно сделать выборку ресурсов, но включить в нее кроме id и названия категорий. Пробую как-то так:
Ну и конечно ничего не работает. Подскажите, пожалуйста, как должно быть правильно.
id | name
Для ресурсов через TV сохраняются id категорий.
Нужно сделать выборку ресурсов, но включить в нее кроме id и названия категорий. Пробую как-то так:
$projects = $modx->runSnippet('pdoResources',array(
'parents' => 4,
'includeTVs' => 'projectCat',
'loadModels' => 'projects',
'leftJoin' => '{"ProjCats" : {"class" : "categories", "on" : "projectCat = ProjCats.id"}}',
'return' => 'json',
'showLog' => 1
));
Ну и конечно ничего не работает. Подскажите, пожалуйста, как должно быть правильно.
Комментарии: 2
ТВ поля подключаются после join, так что придется подтянуть всю цепочку вручную:
Не проверял, но должно работать.
$projects = $modx->runSnippet('pdoResources',array(
'parents' => 4,
'includeTVs' => 'projectCat',
'loadModels' => 'projects',
'leftJoin' => '{
"TvFieldResource" : {
"class" : "modTemplateVarResource",
"on" : "TvFieldResource.contentid = modResource.id" //Связываем тв поле с значением по полю id ресурса
},
"TvField" : {
"class": "modTemplateVar",
"on": "TvField.id = TvFieldResource.tmplvarid AND TvField.name = \"projectCat\"" //Это связь для тв поля по по имени, хотя можно его и не использовать, а указать в TvFieldResource сразу значение tmplvarid(id тв поля)
},
"ProjCats" : {
"class" : "categories",
"on" : "TvFieldResource.value = ProjCats.id" //связываем значение тв поля с вашим классом
}
}',
'select' => '{
"modResource": "*", //подтягиваем поля ресурса
"ProjCats": "ProjCats.id as category_id, ProjCats.name as category_name" //и поля вашего класса, создав им псевдонимы category_id и category_name
}',
'return' => 'json',
'showLog' => 1
));
Не проверял, но должно работать.
Да, все работает, спасибо!
П.С. Там не leftJoin, а innerJoin должен быть, но то уже мелочи )
П.С. Там не leftJoin, а innerJoin должен быть, но то уже мелочи )
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.