首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将MySql码转换成laravel码?

如何将MySql码转换成laravel码?
EN

Stack Overflow用户
提问于 2019-08-28 14:47:36
回答 1查看 87关注 0票数 0

我正在用laravel构建博客应用程序,并为此使用3个表:用户、帖子和评分。用户登录后,除其他外,还可以对帖子进行评分。因此,我在post表中添加了列avgRating来存储每个帖子的平均评分。

我试图在mysql中不使用laravel执行这段代码。

代码语言:javascript
复制
UPDATE posts p
    SET p.avgRating=
        (SELECT ROUND(AVG(r.rating), 0)
        FROM ratings r
        WHERE p.id=r.rateable_id)

而且起作用了。我试着用PostController.php写成这样

代码语言:javascript
复制
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();

  }

它什么也做不了。有人能解释怎么用拉拉来做这个吗?

EN

回答 1

Stack Overflow用户

发布于 2019-08-28 14:55:07

首先,您不做select来期望posts列表的返回结果。

其次,DB::raw()只允许您编写原始SQL,它不运行它。为此,你可以使用select()update()statement(),.

以你为例,你可以

代码语言:javascript
复制
DB::statement('UPDATE posts p
    JOIN (
        SELECT r.rateable_id, ROUND(AVG(r.rating), 0) as rounded
        FROM ratings r
        GROUP BY r.rateable_id
    ) a on p.id = a.rateable_id
    SET p.avgRating=a.rounded');
$posts = Post::all();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57695039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档