我正在使用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)
尝试
$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)
}