Php 搜索和多对多关系
我有posts模型和tags模型我需要做一个搜索查询,这样用户输入标签,然后函数获取这个标签并显示所有相关的帖子,所以它是多对多关系post属于多个标签,tags属于多个帖子,所以我声明了关系,但我找不到方法使用关系很明显,我不知道在模型名称和关系函数中放什么Php 搜索和多对多关系,php,laravel,relationship,backend,Php,Laravel,Relationship,Backend,我有posts模型和tags模型我需要做一个搜索查询,这样用户输入标签,然后函数获取这个标签并显示所有相关的帖子,所以它是多对多关系post属于多个标签,tags属于多个帖子,所以我声明了关系,但我找不到方法使用关系很明显,我不知道在模型名称和关系函数中放什么 public function search() { $q = Input::get ( 'q' ); $posts = post::where('tag_name','LIKE','%'.$q.'%')->tags
public function search()
{
$q = Input::get ( 'q' );
$posts = post::where('tag_name','LIKE','%'.$q.'%')->tags()->get;
dd($posts);
if(count($posts) > 0)
return view('guest.blog.search_result' , ['title' => 'Resaults'])->withDetails($posts)->withQuery ( $q );
else return view ('guest.blog.no_resault' , ['title' => 'Resaults'])->withMessage('No Details found');
}
public function search()
{
$q = Input::get ( 'q' );
这是我的搜索功能
public function search()
{
$q = Input::get ( 'q' );
$posts = post::where('tag_name','LIKE','%'.$q.'%')->tags()->get;
dd($posts);
if(count($posts) > 0)
return view('guest.blog.search_result' , ['title' => 'Resaults'])->withDetails($posts)->withQuery ( $q );
else return view ('guest.blog.no_resault' , ['title' => 'Resaults'])->withMessage('No Details found');
}
public function search()
{
$q = Input::get ( 'q' );
我的帖子模型
public function tags()
{
return $this->belongsToMany('\Conner\Tagging\Model\Tagged');
}
我的标签型号它来自rtconner软件包
此关系来自原始包
public function tag()
{
$model = $this->taggingUtility->tagModelString();
return $this->belongsTo($model, 'tag_slug', 'slug');
}
我宣布了这种关系
public function posts()
{
return $this->belongsToMany('App\Post');
}
我的问题是如何使搜索查询正确无误地工作
注意:有一个搜索字段,用户将只写标签,所以我应该采取这个输入,这是标签,然后寻找其相应的职位
然后我将向用户显示它
编辑
我的搜索功能
public function search()
{
$q = Input::get ( 'q' );
$posts = post::where('tag_name','LIKE','%'.$q.'%')->tags()->get;
dd($posts);
if(count($posts) > 0)
return view('guest.blog.search_result' , ['title' => 'Resaults'])->withDetails($posts)->withQuery ( $q );
else return view ('guest.blog.no_resault' , ['title' => 'Resaults'])->withMessage('No Details found');
}
public function search()
{
$q = Input::get ( 'q' );
//我使用get是因为我想要所有属于同一标签的帖子
$posts=taged::其中'tag_name'、'LIKE'、'%.$q.'%'->带有'posts'->get;
dd$员额;
ifcount$posts>0
返回视图'guest.blog.search_result',['title'=>'Results']->withDetails$posts->withQuery$q;
否则返回视图'guest.blog.no_result',['title'=>'Results']->并显示消息'no Details found';
}
我的贴子和模型是一样的
我在数据库中添加了一个表,表名为post_-taged,其中有两列post_-id和taged_-id
因此,关系将通过该表发生,如果您没有创建它,它将抛出SQL状态错误,据我所知,您正在尝试根据帖子所属的标记查询帖子 除非在post表上有一个tag_name列,否则您做的第一件事就是查询post表的tag_name,而不是tag表
public function search()
{
$q = Input::get ( 'q' );
//Use first instead of get incase of multiple results
$tag = Tag::where('tag_name','LIKE','%'.$q.'%')->with('posts')->first();
return view('guest.blog.search', compact('tag','q'));
}
您需要做的是根据标签的名称查询标签。然后是所有的标签。控制器中也不需要条件语句。您可以在blade模板中使用条件语句,如下所示:
@if($tag->count())
@if($tag->post->count())
@foreach($tag->post as $post)
{{$post->title}}
@endforeach
@else
<h1>No posts found
@endif
@else
<h1>There was no tag. {{$q}}</h1>
@endif
谢谢你给了我提示虽然我把你说的话改了一半,但还是奏效了^^