Propel ORM – Соединение несвязанных таблиц

Как этот оператор SQL преобразуется в Propel (1.6.3)?

SELECT * FROM table_a JOIN table_b 

Поскольку tableA и tableB не используют внешние ключи и не имеют определенных отношений.

 TableAQuery::create()->join('tableB') 

не работает, поскольку Propel жалуется на ошибку:

«Неустранимая ошибка: исключить исключение« PropelException »с сообщением« Неизвестное отношение TableB в таблице TableA »

Большое спасибо за любую помощь и подсказки! Это мой первый пост здесь, и я надеюсь, что еще не сделал ничего плохого 🙂 (Я тщательно искал, прежде чем отправил!)

Вы можете обойти это ограничение, используя синтаксис SQL. Например:

 $con = Propel::getConnection(SomePeer::DATABASE_NAME); $query = 'SELECT * FROM `table_a` JOIN `table_b` LIMIT 10'; $stmt = $con->prepare($query); if($stmt->execute()) { $res = $stmt->fetchAll(); var_dump($res); } 

Примечание № 1: Эти объединения могут стать очень большими и быстро исчерпать допустимый объем памяти. Вот почему я добавил LIMIT .

Примечание # 2: вывод не очень чистый, массивы как числовых, так и ассоциативных ключей. Возможно, есть способы улучшить это.

Вы также можете использовать « addJoin » следующим образом:

 TableAQuery::create() ->addJoin(TableAPeer::ThisCOLUMN, TableBPeer::ThatCOLUMN, Criteria::INNER_JOIN); //Can also be left/right 

Третий аргумент также принимает левое и правое соединение.

И вместо обычного " filterByXXX () "

 ->filterByOtherColumn(value) 

вы должны использовать « add () », например:

 ->add(TableAPeer::OtherCOLUMN, value)