我需要帮助将此查询转换为 Laravel 查询构建器

时间:2021-05-11 03:46:53

标签: laravel query-builder laravel-query-builder

如果您愿意,我需要一些帮助来将此查询转换为 Laravel 的查询构建器:

SELECT
      DATE(created_at) AS Date,
      SUM(CASE WHEN `Type` = 'Votes' THEN 1 ELSE 0 END) AS 'Total Votes',
      SUM(CASE WHEN `Type` = 'Users' THEN 1 ELSE 0 END) AS 'Total Users'
    FROM
    (
        SELECT created_at, 'Votes' `Type` FROM votes
        UNION ALL
        SELECT created_at, 'Users'        FROM users
    ) t
    GROUP by DATE(created_at)
    ORDER by DATE(created_at) DESC

有人可以帮我吗? 谢谢!!

================================================ ==================

更新: 其实我的问题是在这段代码上:

public function getVoteResult($topic_id){
        if($topic_id==null || $topic_id == ""){
            return null;
        }
        $topic = VoteTopicModel::select('*')->where('topic_id', $topic_id)->first();
        $choice = VoteChoiceModel::select('choice_id', 'name')->where('vote_topic_id', $topic_id)->get();
        
        foreach($choice as $choices){
                $choices['count_result'] = VoteChoiceSubmitModel::select('*')->where('vote_choice_id', $choices->choice_id)->count();
        }
        $data = array('topic_id' => $topic_id, 'topic_name' => $topic->name, 'topic_title' => $topic->title, 'choice' => $choice);
        return $data;
    }

它运行良好,但是,正如您所看到的,我调用了三个表 VoteTopicModelVoteChoiceModelVoteChoiceSubmitModel,它们实际上并不有效。所以我的朋友说尝试使用该查询,但我真的不明白。

提前致谢!!帮助我...

1 个答案:

答案 0 :(得分:0)

该查询看起来非常大,可以快速转换为查询构建器,但您可以通过简单的方式完成此操作。

  DB::select( DB::raw("SELECT
  DATE(created_at) AS Date,
  SUM(CASE WHEN `Type` = 'Votes' THEN 1 ELSE 0 END) AS 'Total Votes',
  SUM(CASE WHEN `Type` = 'Users' THEN 1 ELSE 0 END) AS 'Total Users'
  FROM
    (
     SELECT created_at, 'Votes' `Type` FROM votes
     UNION ALL
     SELECT created_at, 'Users'        FROM users
    ) t
  GROUP by DATE(created_at)
  ORDER by DATE(created_at) DESC") )
相关问题