Php 搜索和多对多关系

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

我有posts模型和tags模型我需要做一个搜索查询,这样用户输入标签,然后函数获取这个标签并显示所有相关的帖子,所以它是多对多关系post属于多个标签,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

谢谢你给了我提示虽然我把你说的话改了一半,但还是奏效了^^