PhalconPHP - 获得具有多个关系的特定对象

时间:2016-07-14 12:45:35

标签: php models phalcon relation

我有一个模型,称之为Robot,它与其他模型有多个toToMany关系 - Part,Country和Permision。关系模型是RobotsParts,RobotsCountries和RobotsPermissions。

每个机器人可以有多个或没有部件,国家和权限链接到它们。

为了让所有机器人都拥有一定的部分,PhalconPHP让它变得简单。 (当然,别名在模型中正确设置)。

$part = Part::findFirstByName("arm");
$robotsWithPart = $part->robots;

同样适用于某个国家的机器人:

$country = Country::findFirstByCode("HR");
$robotsWithCountry = $country->robots;

但是,如何才能获得具有特定部分,国家和许可的机器人?

我有过徒劳的尝试:

$country = Country::findFirstByCode("HR");
$part = Part::findFirstByName("arm");

$robots = $country->getRobots([
    'conditions' => "(partId = :pid:)",
    'bind' => [
        'pid' => $part->id
    ]
]);

但是,当然,partId不被识别,因为它不属于任何选定的模型;

1 个答案:

答案 0 :(得分:1)

您可以使用$model->getRelated('model', $parameters = [])选项 $parameters = []的工作方式与通常查询模型的方式相同。即;它采用参数orderlimitconditions,...

$country = Country::findFirstByCode("HR");
$part = Part::findFirstByName("arm");

$robots = $country->getRelated('Robot', ['partId = ' . $part->id]);

您可以在the documentation

中找到

<强>更新

这听起来像是不可能的。您必须在Robot模型上调用自定义查询。像这样:

$result = Robot::query()
        ->join('Country', 'Country.id = Robot.countryId')
        ->join('Part', 'Part.robotId = Robot.id')
        ->where('Country.code = :code:')
        ->where('Part.name = :name:')
        ->bind(['code' => 'HR', 'name' => 'arm'])
        ->execute();

如果您愿意使用,也可以使用Querybuilder。