【发布时间】:2015-12-08 19:41:39
【问题描述】:
我试图了解如何将 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");
我现在最终转换为查询生成器的地方是:
$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();
我读到我不能在连接中使用 whereIn。我现在得到的错误:
调用未定义的方法 Illuminate\Database\Query\JoinClause::whereIn()
我真的不知道如何将我的 SQL 转换为查询生成器。我希望当我看到我的查询的良好工作转换时,我能理解下一次我必须如何做。
【问题讨论】:
-
我没试过这个,但也许用
->whereRaw('id IN ?', [$tagid[0]->id])。只需确保最后的 bindings 参数是一个数组。但是,我不知道您为什么将 WHERE IN 用于一个值 -$tagid[0]->id。这会返回一个数组还是什么?这是一个替代解决方案stackoverflow.com/questions/26913776/…
标签: php mysql laravel octobercms