我有一个模型,称之为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不被识别,因为它不属于任何选定的模型;
答案 0 :(得分:1)
您可以使用$model->getRelated('model', $parameters = [])
选项
$parameters = []
的工作方式与通常查询模型的方式相同。即;它采用参数order
,limit
,conditions
,...
$country = Country::findFirstByCode("HR");
$part = Part::findFirstByName("arm");
$robots = $country->getRelated('Robot', ['partId = ' . $part->id]);
中找到
<强>更新强>
这听起来像是不可能的。您必须在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。