【问题标题】:Phalcon builder sql multi table column select not workingPhalcon builder sql多表列选择不起作用
【发布时间】:2017-12-24 00:54:59
【问题描述】:

所以我试图让最终的 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 构建错误。如果有人可以给我一个我想要达到的目标的例子,那就太好了。

【问题讨论】:

  • Ptable != ptable
  • 是的,很抱歉,输入错误。
  • 通常列在表之前指定,所以你试过->columns('r.*, Ptable.storeid')->addFrom('rtable', 'r')->innerJoin(...

标签: php mysql sql phalcon


【解决方案1】:

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

这是一个简单的连接示例,以及如何从两个表中选择特定列。

$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

在上面的示例中,我只选择了我需要进行演示的列。如果您以性能为目标,这是最佳实践。但是,您可以像这样选择整个对象:aliasForTable1.*aliasForTable2.*...,这将返回整个模型对象,您将能够使用模型方法。

请注意:

->getSingleResult() 将只返回 1 个结果;

->execute() 将返回包含多个对象的结果集;

文档中的更多查询构建器示例:https://docs.phalconphp.com/en/3.2/api/Phalcon_Mvc_Model_Query_Builder

【讨论】:

  • 谢谢,我通常会这样做,但我的表有超过 80 列,所以不可行。
  • 我明白了。然后你可以像我建议的那样选择所有列['alias1.*', 'alias2.*'] ... :)
  • 实际上我尝试了数组格式但它仍然不起作用,然后我得到了它与这个columns('r.*, Ptable.storeid')
  • 更新了上面的答案,说明如何从表中选择所有列。
猜你喜欢
  • 1970-01-01
  • 2017-09-28
  • 2013-05-25
  • 2018-10-02
  • 1970-01-01
  • 2017-06-17
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
相关资源
最近更新 更多