Phalcon 构建器 sql 多 table 列 select 不工作

Phalcon builder sql multi table column select not working

所以我试图让最终的 sql 像这样:

Select r.*, ptable.storeid from rtable as r innerjoin ptable ON ptable.id = r.pid;

但是在 phalcon phql 中没有显示这个的例子,我知道我可以在原始 sql 中做到这一点,但我想知道是否有办法使用 phql 来做到这一点。到目前为止我试过这样的:

$row = $this->modelsManager->createBuilder()
    ->addFrom('rtable', 'r')
    ->columns('Ptable.storeid')
    ->innerJoin('Ptable','r.pid = Ptable.id')
    ->getQuery()
    ->execute();

但这仍然不起作用,并给出了 sql 构建错误。如果有人能给我一个我想要实现的目标的例子,那就太好了。

查看您的代码 ->columns('Ptable.storeid') 这部分将仅 return 仅包含 storeid 个值的对象的结果集。

这是一个简单的连接示例,以及如何 select 来自两个表的特定列。

$result = $this->modelsManager->createBuilder()
    ->columns([
        'profile.*',
        'details.*',
    ])
    ->from(['profile' => 'Models\Profiles'])
    ->leftJoin('Models\ProfileDetails', 'details.profile_id = profile.id', 'details')
    ->where('profile.id = :id:', ['id' => 1])
    ->getQuery()->getSingleResult();


print_r($result->profile->toArray()); // All columns from Profiles table
print_r($result->details->toArray()); // All columns from ProfileDetails table

在上面的示例中,我 select 只显示了我需要展示的列。如果您以性能为目标,这是最佳实践。但是,您可以 select 整个对象,如下所示:aliasForTable1.*aliasForTable2.*...,这将 return 整个模型对象,您将能够使用模型方法。

注意:

->getSingleResult() 将 return 只有 1 个结果;

->execute() 将 return 具有多个对象的结果集;

文档中有更多查询生成器示例:https://docs.phalconphp.com/en/3.2/api/Phalcon_Mvc_Model_Query_Builder