Как этот оператор 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)