Я создаю блог с laravel, где у сообщения много тегов. Я хочу отфильтровать все сообщения по тегу. означает, что если я нажму на тег "PHP", я хочу получить все связанные сообщения.
Вот мой код
У меня есть две таблицы сначала для тегов, а вторая таблица для ссылки с сообщениями
tag_table
public function up()
{
Schema::create('tags', function (Blueprint $table) {
$table->increments('id');
$table->string('tags');
$table->timestamps();
});
}
таблица тегов отношений
public function up()
{
Schema::create('article_tag', function (Blueprint $table) {
$table->increments('id');
$table->integer('article_id')->unsigned();
$table->foreign('article_id')->references('id')->on('articles');
$table->integer('tag_id')->unsigned();
$table->foreign('tag_id')->references('id')->on('tags');
});
}
Модель статьи
class Article extends Model
{
public function tags()
{
return $this->belongsToMany('App\Tag');
}
}
модель тега
class Tag extends Model
{
public function articles()
{
return $this->belongsToMany('App\Article');
}
}
Контроллер тегов
public function show($id,$name)
{
//here I received tag id and name.
$list->with('articles')->get();
return view('articles.tagshow')->withList($list);
}






Eloquent предлагает метод где, который позволяет фильтровать атрибуты связанных моделей. Чтобы отфильтровать статьи по именам связанных с ними тегов, необходимо сделать следующее:
$articles = Article::whereHas('tags', function($query) use ($tagName) {
$query->whereName($tagName);
})->get();
Однако в вашем случае это должно быть еще проще, потому что у вас уже есть идентификатор тега в вашем контроллере, поэтому вы можете просто получить модель тега по идентификатору, а затем вернуть связанные статьи:
public function show($id,$name) {
return Tag::findOrFail($id)->articles;
}
Дополнительную информацию можно найти в документации по запросам отношений: https://laravel.com/docs/5.6/eloquent-relationships#querying-relations
Вы читали красноречивые отношения. Если нет, то рекомендую прочитать laravel.com/docs/5.6/eloquent-relationships