你能在CakePHP的一个查询中包含两个模型吗?

时间:2010-09-17 17:21:56

标签: cakephp models

我正在构建一个书评应用程序。

在Review模型中,我有book_id和几个字段,如author_rating和/或scary_rating。

在Book模型中,我有一个search()函数,我想用它来搜索具有某些特征的书籍,例如5以上的author_rating。

实现这一目标的最佳方法是什么?我知道这些可能是错误的,但我可以将属性(author_rating,scary_rating等)添加到书模型中,并在每次提交评论时更新它们(平均值);或者,我可以运行一个每隔一段时间更新这些字段的cron任务。

但是,有没有更好的方法可以查询Book和Review模型来提出书籍并满足通过查看评论数据库定义的某些标准?

这有意义吗?

2 个答案:

答案 0 :(得分:1)

you could use union, to combine two queries!!!

query 1......

union

query 2.....

order by ratings LIMIT 1

在这种格式中,如果你想要现实生活的例子,那么我愿意给你一个,

SELECT
               u.username, u.picture,m.id, m.user_note, m.reply_id, m.reply_name, m.dt
              FROM
                relationships r,
                notes m,
                user u
              WHERE
                m.user_id = r.leader
              AND
                r.leader = u.user_id
              AND
                r.listener = '$user_id'
             UNION
               select username, picture,id, user_note, reply_id, reply_name, dt
               from user u, notes b
               where u.user_id = b.user_id
               and
               b.user_id ='$user_id'
               ORDER BY dt DESC LIMIT 10";

答案 1 :(得分:0)

听起来你有一堆评论,你想在有人搜索时动态平均它们,这是正确的吗?如果是这样,我认为将平均评级保存为Book模型中的字段可能会更好。

我之所以这样说是因为您的应用可能会比保存评论更多地进行搜索,而且快速返回搜索可能比快速保存的评价更为重要。

但是,如果要动态计算这些平均值,可以使用MySQL的AVG()函数。请查看此SO帖子,以获取我认为非常接近您的情况的示例:

MySQL - Can I combine these 2 SQL statements? Combine JOIN and AVG?

另外,在这种情况下我可能只是编写SQL并将其粘贴到query()中,而不是试图与Cake的ORM语法搏斗:

http://book.cakephp.org/view/456/query