Tho*_*mas 7 php sql orm propel
这个SQL语句如何转换为Propel(1.6.3)?
SELECT * FROM table_a JOIN table_b
Run Code Online (Sandbox Code Playgroud)
tableA和tableB不共享外键并且没有定义关系.
TableAQuery::create()->join('tableB')
Run Code Online (Sandbox Code Playgroud)
因为Propel抱怨错误,所以不起作用:
"致命错误:未捕获的异常'PropelException',消息'TableA表上的未知关系TableB'
非常感谢您的任何帮助和提示!这是我在这里的第一篇文章,我希望我还没有做错任何事:-)(我在发布之前已经彻底搜索了!)
Qin*_*iso 35
你也可以像这样使用" addJoin ":
TableAQuery::create()
->addJoin(TableAPeer::ThisCOLUMN, TableBPeer::ThatCOLUMN, Criteria::INNER_JOIN); //Can also be left/right
Run Code Online (Sandbox Code Playgroud)
第三个参数也采用左右连接.
并且,而不是通常的" filterByXXX() "
->filterByOtherColumn(value)
Run Code Online (Sandbox Code Playgroud)
你会使用" add() ",如下所示:
->add(TableAPeer::OtherCOLUMN, value)
Run Code Online (Sandbox Code Playgroud)
您可以使用原始 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);
}
Run Code Online (Sandbox Code Playgroud)
注意#1:这些类型的连接可能会变得非常大,并很快耗尽允许的内存大小。这就是为什么我添加了一个LIMIT
.
注意#2:输出不是很干净,是数字键和关联键的数组。也许有一些方法可以改善这一点。