2013-01-22 5 views
6

Sto ri-scrivendo alcuni PHP/MySQL per lavorare con Laravel. Una cosa che vorrei fare è rendere il DB interroga più succinto with the Fluent Query Builder ma io sono un po 'perso:Selezionare da più tabelle con il generatore di query fluviale laravel

SELECT p.post_text, p.bbcode_uid, u.username, t.forum_id, t.topic_title, t.topic_time, t.topic_id, t.topic_poster 
FROM phpbb_topics t, phpbb_posts p, phpbb_users u 
WHERE t.forum_id = 9 
AND p.post_id = t.topic_first_post_id 
AND u.user_id = t.topic_poster 
ORDER BY t.topic_time 
DESC LIMIT 10 

Questo interroga un forum phpBB e ottiene post: enter image description here

Come potrei RE- scrivilo per usare la sintassi di Fluent Query Builder?

risposta

18

Non testato, ma qui è un inizio

return DB::table('phpbb_topics') 
         ->join('phpbb_posts', 'phpbb_topics.topic_first_post_id', '=', 'phpbb_posts.post_id') 
         ->join('phpbb_users', 'phpbb_topics.topic_poster', '=', 'phpbb_users.user_id') 
         ->order_by('topic_time', 'desc') 
         ->take(10) 
         ->get(array(

            'post_text', 
            'bbcode_uid', 
            'username', 
            'forum_id', 
            'topic_title', 
            'topic_time', 
            'topic_id', 
            'topic_poster' 


         )); 
+0

Ah, non era a conoscenza si poteva catena unisce. Utile, grazie. –

+0

C'è un'opzione come qui di seguito (testato in 5.3) - -> get (array ('phpbb_topics *', 'username', 'phpbb_posts.post_text' ) – Sadat

2

considerazione cercando di questo codice. Dovrebbe realizzare ciò che è necessario completato.

DB::select(DB::raw("SELECT p.post_text, p.bbcode_uid, u.username, t.forum_id, t.topic_title, t.topic_time, t.topic_id, t.topic_poster 
FROM phpbb_topics t, phpbb_posts p, phpbb_users u 
WHERE t.forum_id = 9 
AND p.post_id = t.topic_first_post_id 
AND u.user_id = t.topic_poster 
ORDER BY t.topic_time 
DESC LIMIT 10")); 
+1

Per non parlare inglese, ti sembrava di aver diagnosticato il problema va bene: p – rayryeng

1
return DB::table(DB::raw('phpbb_topics t, phpbb_posts p, phpbb_users u')) -> select(DB::raw('p.post_text, p.bbcode_uid, u.username, t.forum_id, t.topic_title, t.topic_time, t.topic_id, t.topic_poster'))->where('phpbb_topics.topic_first_post_id', '=', 'phpbb_posts.post_id')->where('phpbb_users', 'phpbb_topics.topic_poster', '=', 'phpbb_users.user_id')->order_by('topic_time', 'desc')->take(10)->get();