2017-02-23 8 views
0

私はLaravelを使用しています。投稿に関連する広告のみを表示するLaravel

同じcategory_idを含む各投稿に広告を表示します。 私は以下のようにしてみましたが、これはうまくいかないと思います。

アドバイスできますか?

posts 
id 
category_id 
title 
body 


advertisements 
id 
category_id 
title 
body 


$advertisements = DB::table('advertisements') 
     ->join('posts', function ($join) { 
      $join->on('advertisements.category_id', '=', 'posts.category_id') 
       ->where('posts.category_id', '=', 'advertisements.category_id'); 
     }) 

     ->get(); 
+0

テーブル間の関係のタイプは、1対1でありますか? –

+0

多すぎるかもしれませんか?各投稿には複数の広告があります。 – KevinSwiss

答えて

0

$ads = DB::table('advertisements') 
->join('posts', 'posts.category_id', '=', 'advertisements.category_id') 
->get(); 

を試してみてくださいしかし、あなたが実際にあなたのタイトルによると、対応する広告付き投稿をしたいです。

$posts = DB::table('posts') 
->leftjoin('advertisements', 'advertisements.category_id', '=', 'posts.category_id') 
->get(); 

あなたが雄弁を使用したいとあなたは多くの関係にいずれかの

$posts = Post::with('category.advertisements')->get(); 
+0

あなたの答えをありがとう。やってみます。とにかく、( 'category.advertisements')とは何ですか? – KevinSwiss

+0

あなたのモデルに適切に定義された関係があれば、PostはCategoryに属し、Categoryには多くのAdvertisementsがあるので、 '$ post-> category-> advertisements'を取るでしょう。 – EddyTheDove

0

を行うことができ、適切に定義されたあなたの関係を持っている場合は、雄弁使用してみてください:

Post.phpを

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Post extends Model 
{ 
    /** 
    * Get the advertisements for the post. 
    */ 
    public function advertisements() 
    { 
     return $this->hasMany('App\Advertisement'); 
    } 
} 

Advertisement.php

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Advertisement extends Model 
{ 

} 

どこコード使用におけるこの

$posts = App\Post::all(); 

foreach ($posts as $post) { 
    dd($post->advertisements) 
} 
関連する問題