In giorni difficili per capire come posso convertire una query SQL in uno stile generatore di query in laravel.converti query SQL in stile query builder
mia query 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");
dove ora finisco per convertire al generatore di query è:
$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();
Ho letto che non posso utilizzare in cui in un join. L'errore io ora ottenere:
Chiama per metodo non definito Illuminate \ Database \ Query \ JoinClause :: in cui()
io davvero non so come posso convertire il mio SQL per query. Spero che quando vedrò una buona conversione di lavoro della mia domanda, posso capire come devo farlo la prossima volta.
non ho provato questo, ma forse usare '> whereRaw (, [$ TagID [0] -> id]) '. Assicurati solo che il parametro dei bind alla fine sia un array.Tuttavia, non so perché stai usando WHERE IN per un valore - '$ tagid [0] -> id'. Questo restituisce una matrice o qualcosa del genere? Ecco una soluzione alternativa http://stackoverflow.com/questions/26913776/laravel-4-add-wherein-clause-to-a-join-condition –