2016-11-15 5 views
0

投稿を書くための最後の9人の著者のリストを取得し、投稿した最後の投稿の日付の順にリストするMySQLクエリがあります。未処理クエリをLaravelクエリビルダーに変換する

正常に動作していますが、私はLaravel Query Builderを使用して書き直したいと思います。ここでは、現時点でのクエリです:

$authors = DB::select(" 
     SELECT 
      `a`.`id`, 
      `a`.`name`, 
      `a`.`avatar`, 
      `a`.`slug` AS `author_slug`, 
      `p`.`subheading`, 
      `p`.`title`, 
      `p`.`slug` AS `post_slug`, 
      `p`.`summary`, 
      `p`.`published_at` 
     FROM 
      `authors` AS `a` 
     JOIN 
      `posts` AS `p` 
      ON `p`.`id` = 
       (
       SELECT `p2`.`id` 
       FROM `posts` AS `p2` 
       WHERE `p2`.`author_id` = `a`.`id` 
       ORDER BY `p2`.`published_at` DESC 
       LIMIT 1 
      ) 
     WHERE 
      `a`.`online` = 1 
     ORDER BY 
      `published_at` DESC 
     LIMIT 9 
    "); 

は、私は、クエリビルダを使用しての基本を理解し、しかしJOINテーブルONSELECTに私を可能Laravelのドキュメントに何かがあるように表示されません。

Laravel Query Builderを使用してこのクエリを書く方法を提案してもらえますか、またはこのクエリを書き直してクエリビルダーで構造を簡単にする方法を提案できますか?

答えて

1

この

$data = DB::table('authors') 
     ->select(
      'a.id', 
      'a.name', 
      'a.avatar', 
      'a.slug AS author_slug', 
      'p.subheading', 
      'p.title', 
      'p.slug AS post_slug', 
      'p.summary', 
      p.published_at') 
     ->from('authors AS a') 
     ->join('posts AS p', 'p.id', '=', DB::raw(" 
      (
       SELECT p2.id FROM posts AS p2 
       WHERE p2.author_id = b.id 
       ORDER BY p2.published_at 
       DESC LIMIT 1 
      )")) 
     ->where('a.online', 1) 
     ->limit(9) 
     ->orderBy('p.published_at', 'desc') 
     ->get(); 
+0

ようおかげで、@Komalを行うようにしてください。あなたの返信は私にこれを解決する正しい考えを与えました。あなたの答えには、いくつかの小さな間違いがあります。答えを正しくマークする前に最初に編集してもよろしいですか? – Joseph

+0

えええええええええええええええええええええええええええええ:) – Komal

+0

さて、やった。再度、感謝します! – Joseph

関連する問題