2017-02-23 23 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

表之間的關係的類型是一到一個? –

+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-> advertisements'因爲Post屬於Category並且Category具有許多廣告。 – 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) 
} 
相關問題