如果一个模型有一个belongsTo关系,是否可以进行一个JOIN查询而不是两个SELECT查询?

我的意思是,如果有两个模型:

<?php

class Robots extends \Phalcon\Mvc\Model
{
    public $id;

    public $name;

    public $type_id;

    public function initialize()
    {
        $this->belongsTo("type_id", "RobotsTypes", "id");
    }

}




<?php

class RobotsTypes extends \Phalcon\Mvc\Model
{

    public $id;

    public $type;

}


我正在尝试获取机器人类型:

$robot = Robots::findFirst(2);
echo $robot->RobotsTypes->type;


然后,Phalcone进行两个SELECT查询:

150312 14:41:02 49 Connect robots@localhost on robots
49 Query SELECT IF(COUNT(*)>0, 1 , 0) FROM `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_NAME`='robots'
49 Query DESCRIBE `robots`
49 Query SELECT `robots`.`id`, `robots`.`name`, `robots`.`type_id` FROM `robots` WHERE `robots`.`id` = '2' LIMIT 1
49 Query SELECT IF(COUNT(*)>0, 1 , 0) FROM `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_NAME`='robot_types'
49 Query DESCRIBE `robot_types`
49 Query SELECT `robot_types`.`id`, `robot_types`.`type` FROM `robot_types` WHERE `robot_types`.`id` = '2' LIMIT 1
49 Quit


是否可以使Phalcon用JOIN仅执行1个查询?

SELECT `robots`.`id`, `robots`.`name`, `robots`.`type_id`, `robot_types`.`id`, `robot_types`.`type` FROM `robots` JOIN `robot_types` ON `robots`.`type_id` = `robot_types`.`id` WHERE `robots`.`id` = '2' LIMIT 1


我知道使用视图可以解决问题。但是它需要创建一个视图和另一个模型。

是否可以仅在Phalcone中执行此操作而不使用PHQL?例如,通过在belongsTo方法中指定附加参数?

Phalcon performance related queries类似

谢谢 :)

最佳答案

$queryBuilder = $this->getDI()->getModelsManager()
    ->createBuilder()
    ->columns(['r.id','r.name', 'r.type_id', 'rt.type'])
    ->addFrom('Robot', 'r')
    ->leftJoin('RobotTypes', 'rt.id = r.type_id', 'rt');

$resultSet = $queryBuilder->getQuery()->execute();//->toArray(); //optional


如果通过名称调用所需的所有列,则应该能够不带多查询DB的类型单独检索完整结果。它仍然不是PHQL,也不需要belongsTo()的声明才能正常工作。

据我所知,您不能仅使用模型来获取可连接的东西-这是因为在多关系表的情况下实现会太复杂,这就是设计queryBuilder的原因。

关于php - Phalcon |一个查询中有两个针对“belongsTo”的查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29012641/

10-12 12:33
查看更多