我想问一下,如何从一个表中获取数据并在其他查找中使用它。
例如,我有电影表。 我想获得最高评价的3部电影。结果应该返回3个ID。
现在,我想从非关联表创建其他查询,并将此3个ID作为"条件"在其他表中查找数据。
我不想使用关联,因为数据存储在许多数据库中,这是有问题的。
谢谢。
答案 0 :(得分:2)
获得电影ID后,您可以使用in
过滤其他Model
的结果: -
$filmIds = ['32','55','75'];
$query = TableRegistry::get('Model')->find()
->where(function ($exp, $q) use ($filmIds) {
return $exp->in('film_id', $filmIds);
});
// WHERE film_id IN ('32','55','75')
查看advanced conditions上的文档部分。
如果您需要将电影ID设置为正确的格式(示例代码中显示的即),您可以对之前查询的结果使用Hash::extract()
。
答案 1 :(得分:1)
如果你的cakephp版本3.x你可以用相当直观的方式使用子查询
$films = TableRegistry::get('Films')->find('highestRated')
->select(['id'])
->limlt(3);
$query = $related->find()
->where(['id' => $films]);
可以在任何可以使用查询表达式的地方接受子查询。例如,在select()和join()方法中。 http://book.cakephp.org/3.0/en/orm/query-builder.html#subqueries