【发布时间】:2019-08-28 23:02:30
【问题描述】:
我在 laravel 中构建博客应用程序,为此我使用 3 个表:用户帖子和评分。用户登录后,他可以对帖子进行评分。所以我在帖子表中添加了列 avgRating 来存储每个帖子的平均评分。
我尝试在没有 laravel 的情况下在 mysql 中执行这段代码。
UPDATE posts p
SET p.avgRating=
(SELECT ROUND(AVG(r.rating), 0)
FROM ratings r
WHERE p.id=r.rateable_id)
它有效。我试图在 PostController.php
中这样写public function avgRating ($avgRating) {
$posts = DB::raw('UPDATE posts p
SET p.avgRating=
(SELECT ROUND(AVG(r.rating), 0)
FROM ratings r
WHERE p.id=r.rateable_id)')->get();
}
它没有做任何事情。任何人都可以解释如何在 laravel 中做到这一点?
【问题讨论】:
-
toSql();方法?
-
你只是在创建一个表达式,而不是运行一个语句。您可以将
DB::raw()替换为DB::statement() -
ok @aynber 我会试试 DB::statement()
-
不要忘记运行 COMMIT 假设在 MySQL 服务器级别或会话级别禁用自动提交..
-
@RaymondNijland 我不明白你的意思?我是 laravel 的新手,我在这里写的这个函数在我只使用纯 php 的应用程序中工作,没有框架。我只需要在我的一个视图文件中调用它并将数据存储在数据库中,现在在 laravel 我不知道该怎么做