推动ORM - 加入不相关的表

时间:2013-09-19 08:44:37

标签: php sql orm propel

这个SQL语句如何转换为Propel(1.6.3)?

SELECT * FROM table_a JOIN table_b

tableA和tableB不共享外键并且没有定义关系。

TableAQuery::create()->join('tableB')
由于Propel抱怨错误,

无效:

  

“致命错误:未捕获的异常'PropelException',消息'TableA表上的未知关系TableB'

非常感谢您的任何帮助和提示!这是我在这里的第一篇文章,我希望我还没有做错任何事:-)(我在发布之前已经彻底搜索过了!)

2 个答案:

答案 0 :(得分:32)

你也可以使用" addJoin "像这样:

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

第三个参数也采用左右连接。

而不是通常的" filterByXXX()"

->filterByOtherColumn(value)

您使用" 添加()",如下所示:

->add(TableAPeer::OtherCOLUMN, value)

答案 1 :(得分:0)

您可以使用原始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:输出不是很干净,数字和关联键的数组。也许有办法改善这一点。