Я показываю все теги сообщений в своем клинке, теперь я хочу выполнить какой-то поиск моих тегов (возьмите изображение ниже в качестве образца)
Я хочу, чтобы когда пользователи нажимали на тег laravel, результат каждого сообщения с тегом laravel показывался им.
posts model
public function tags(){
return $this->belongsToMany(Tag::class);
}
tags model
public function posts(){
return $this->belongsToMany(Post::class);
}
как мне передать это?
Вы должны поделиться большей частью своего кода (контроллер, представление). При нажатии на тег открывается новая страница?
@JonasStaudenmeir, хорошо, теперь я их получил, но что, если я хочу использовать тег title в моем URL-адресе вместо id? поэтому в моем URL-адресе будет site/tag-search/laravel вместо site/tag-search/1
Название уникально? Вы также можете комбинировать id и title: site/tag-search/laravel/1
да, заголовок уникален, но мой вопрос в том, что когда я передаю заголовок вместо идентификатора своему контроллеру, как мне получить его идентификатор, чтобы я мог найти этот идентификатор в своих сообщениях? (вы знаете, что на самом деле мы будем искать по идентификатору тега, вместо этого просто покажите заголовок в URL-адресе)
Вы можете использовать Tag::where('title', $title)->first(). Или getRouteKeyName(), если вы используете привязку модели маршрута.
@JonasStaudenmeir, спасибо, пожалуйста, поделись Tag::find($id)->posts в качестве ответа, я подтверждаю это.






Попробуйте что-то вроде этого:
Post::whereHas('tags', function($query) use ($tag) {
$query->where('title', $tag);
})->get();
Где $tag будет заголовком вашего тега.
Ссылка: https://laravel.com/docs/5.6/eloquent-relationships#querying-relationship-existence
Пример привязки модели маршрута из RouteServiceProvider:
public function boot()
{
parent::boot();
Route::patterns([
'tag_title' => '[a-z]+',
]);
Route::get('posts/{tag_title}', function ($tag_title) {
return Tag::where('title', $tag_title)->firstOrFail();
});
}
Я попробую и дам вам знать, спасибо, всего один вопрос: следует ли мне изменить {id} в моем маршруте, чтобы получить заголовок тега в URL-адресе? Если да, то что мне добавить вместо этого?
Это действительно зависит от того, как вы привязываете модели к маршруту - я бы рекомендовал использовать RouteServiceProvider - затем вы могли бы явно привязать его, используя titlelaravel.com/docs/5.6/routing#route-model-binding
Я добавил пример привязки модели маршрута.
Tag::find($id)->postsне работает?