将SQL查询转换为查询构建器样式

Wou*_*ter 6 php mysql laravel octobercms

我正在努力了解如何将一个SQL查询转换为laravel中的查询构建器样式.

我的SQL查询是:

$tagid = Db::select("SELECT `id` FROM `wouter_blog_tags` WHERE `slug` = '".$this->param('slug')."'");

$blog = Db::select("SELECT * 
            FROM `wouter_blog_posts` 
            WHERE `published` IS NOT NULL 
            AND `published` = '1'
            AND `published_at` IS NOT NULL 
            AND `published_at` < NOW()
            AND (

            SELECT count( * ) 
            FROM `wouter_blog_tags` 
            INNER JOIN `wouter_blog_posts_tags` ON `wouter_blog_tags`.`id` = `wouter_blog_posts_tags`.`tags_id` 
            WHERE `wouter_blog_posts_tags`.`post_id` = `wouter_blog_posts`.`id` 
            AND `id` 
            IN (
             '".$tagid[0]->id."'
            )) >=1
            ORDER BY `published_at` DESC 
            LIMIT 10 
            OFFSET 0");
Run Code Online (Sandbox Code Playgroud)

我现在最终转换为查询构建器的位置是:

   $test = Db::table('wouter_blog_posts')
->where('published', '=', 1)
->where('published', '=', 'IS NOT NULL')
->where('published_at', '=', 'IS NOT NULL')
->where('published_at', '<', 'NOW()')
  ->select(Db::raw('count(*) wouter_blog_tags'))
->join('wouter_blog_posts_tags', function($join)
{ 
$join->on('wouter_blog_tags.id', '=', 'wouter_blog_posts_tags.tags_id')
->on('wouter_blog_posts_tags.post_id', '=', 'wouter_blog_posts.id')
->whereIn('id', $tagid[0]->id);
})
->get();
Run Code Online (Sandbox Code Playgroud)

我已经读过我不能在连接中使用whereIn.我现在得到的错误:

调用未定义的方法Illuminate\Database\Query\JoinClause :: whereIn()

我真的不知道如何将我的SQL转换为查询构建器.我希望当我看到一个良好的工作转换我的查询时,我可以理解下次我该怎么做.

Wou*_*ter 1

这对我来说工作:

DB::table('wouter_blog_posts') ->whereNotNull('已发布') ->where('已发布', 1) ->whereNotNull('published_at') ->whereRaw(' < NOW()') ->whereRaw published_at( "(SELECT count(*) FROM wouter_blog_tags INNER JOIN wouter_blog_posts_tagsON wouter_blog_tags. id= wouter_blog_posts_tags. tags_id WHERE wouter_blog_posts_tags. post_id= wouter_blog_posts. id AND id IN ( '".$tagid."' )) >=1") ->orderBy('published_at', 'desc') ->跳过(0) ->采取(10) ->分页($this->property('postsPerPage'));