Laravel只显示与帖子相关的广告

时间:2017-02-23 02:01:20

标签: 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();

2 个答案:

答案 0 :(得分: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();

如果您想使用Eloquent并且您已正确定义了您的关系,则可以

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

答案 1 :(得分:0)

对于One to Many关系,请尝试使用Eloquent:

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)
}