Phalcon Builder SQL Multi столбец таблицы не работает

0

Поэтому я пытаюсь получить окончательный 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. если кто-то может дать мне пример того, что я пытаюсь достичь, было бы здорово.

Теги:
phalcon

1 ответ

0
Лучший ответ

Если посмотреть на ваш код ->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

  • 0
    спасибо, и я обычно делаю это, но моя таблица имеет более 80 столбцов, так что это невозможно.
  • 0
    Я понимаю. Затем вы можете просто выбрать все столбцы, как я предложил ['alias1.*', 'alias2.*'] ... :)
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню