Поэтому я пытаюсь получить окончательный sql как-то вроде этого:
Select r.*, ptable.storeid from rtable as r innerjoin ptable ON ptable.id = r.pid;
Но в phalcon phql нет примера, показывающего это, и я знаю, что могу сделать это в raw sql, но я хочу знать, есть ли способ сделать это, используя phql. Пока ive пробовал вот так:
$row = $this->modelsManager->createBuilder()
->addFrom('rtable', 'r')
->columns('Ptable.storeid')
->innerJoin('Ptable','r.pid = Ptable.id')
->getQuery()
->execute();
Но это все еще не работает и дает ошибку sql build. если кто-то может дать мне пример того, что я пытаюсь достичь, было бы здорово.
Если посмотреть на ваш код ->columns('Ptable.storeid')
эта часть вернет только результат storeid
объектов, содержащих только значения storeid
.
Вот простой пример соединения и выбор отдельных столбцов из двух таблиц.
$result = $this->modelsManager->createBuilder()
->columns([
'profile.*',
'details.*',
])
->from(['profile' => 'Models\Profiles'])
->leftJoin('Models\ProfileDetails', 'details.profile_id = profile.id', 'details')
->where('profile.id = :id:', ['id' => 1])
->getQuery()->getSingleResult();
print_r($result->profile->toArray()); // All columns from Profiles table
print_r($result->details->toArray()); // All columns from ProfileDetails table
В приведенном выше примере я выбираю только те столбцы, которые мне нужны для презентации. Это лучшая практика, если вы нацелены на производительность. Однако вы можете выделить целые объекты: aliasForTable1.*
, aliasForTable2.*
..., это вернет весь объект модели, и вы сможете использовать методы модели.
Обратите внимание, что:
->getSingleResult()
вернет только 1 результат;
->execute()
возвращает результат с несколькими объектами;
Дополнительные примеры Query Builder в документах: https://docs.phalconphp.com/en/3.2/api/Phalcon_Mvc_Model_Query_Builder
['alias1.*', 'alias2.*']
... :)