【问题标题】:Cakephp - get database data from not associated modelsCakephp - 从不相关的模型中获取数据库数据
【发布时间】:2015-06-25 11:28:14
【问题描述】:

我想问,如何从一个表中获取数据并将其用于其他查找。

例如,我有电影表。 我想获得评分最高的 3 部电影。结果应该返回 3 个 ID。

现在,我想从未关联的表中创建其他查询,并将这 3 个 ID 作为“条件”传递以在其他表中查找数据。

我不想使用关联,因为数据存储在很多数据库中,这是有问题的。

谢谢。

【问题讨论】:

  • 您使用的是哪个版本?
  • 你的意思是你想在不同的模型中使用不同的表?
  • 是的。如果第一个结果返回数组 ('32','55','75) 我如何使用这些数据过滤其他 find() 的结果?
  • 或者,我如何将 id 数组传递给其他查找条件?

标签: php cakephp cakephp-3.0


【解决方案1】:

获得电影 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()

【讨论】:

  • @user2610146 抱歉,忘记将$filmIds 传递给关闭。我已经更新了答案。
  • 不要说对不起 :) 每一个帮助都是有帮助的,谢谢。你给了我一个提示,我这样做了:->where(['id IN' =>$filmIds]) 最好的问候。
【解决方案2】:

如果你的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多