我嘗試幾天瞭解如何將SQL查詢轉換爲laravel中的查詢生成器樣式。將SQL查詢轉換爲查詢生成器樣式
我的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();
我已閱讀,我不能在其中一個連接使用。錯誤我現在得到:
調用未定義的方法照亮\數據庫\查詢\ JoinClause ::其中()
我真的不知道我怎麼能轉換我的SQL查詢生成器。我希望當我看到我的查詢有一個很好的工作轉換時,我可以理解我下次如何做。
我沒有試過,但也許使用'> whereRaw([$標籤識別[0] - > id])'。只要確保最後的綁定參數是一個數組。然而,我不知道你爲什麼使用WHERE IN作爲一個值 - '$ tagid [0] - > id'。這是否返回一個數組或什麼? 這是一個替代解決方案http://stackoverflow.com/questions/26913776/laravel-4-add-wherein-clause-to-a-join-condition –