推进 ORM - 连接不相关的表


Propel ORM - Joining unrelated tables

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

SELECT * FROM table_a JOIN table_b

表 A 和表 B 不共享外键,也没有定义关系。

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

不起作用,因为 Propel 抱怨错误:

"致命错误:未捕获的异常'PropelException',消息为'表A表上的未知关系表B'

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

你也可以

像这样使用"addJoin":

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

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

而且,而不是通常的"filterByXXX()"

->filterByOtherColumn(value)

你会使用"add()",像这样:

->add(TableAPeer::OtherCOLUMN, value)

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