繁体   English   中英

搜索和多对多关系

[英]Search and many to many relationships

我有帖子模型和标签模型,我需要进行搜索查询,以便用户输入标签,然后该函数获取此标签并显示所有相关的帖子,因此,关系到很多的帖子属于多个标签,而标签属于到很多帖子,所以我声明了关系船,但是我找不到一种使关系船的where子句很明显的方法,我不知道在模型名称和关系函数中要放什么

这是我的搜索功能

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 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' );

//我使用get是因为我希望所有属于同一标签的帖子$ posts = Tagged :: where('tag_name','LIKE','%'。$ q。'%')-> with('posts ')-> get(); dd($ posts); if(count($ posts)> 0)return view('guest.blog.search_result',['title'=>'Results'])-> withDetails($ posts)-> withQuery($ q); 否则返回视图('guest.blog.no_result',['title'=>'Results'])-> withMessage('未找到详细信息'); }

我的标记和帖子模型相同

我在数据库中添加了一个表,该表的名称为post_tagged,其中有两列post_idtagged_id

因此,如果不创建关系表,它将通过该表发生,它将引发SQL状态错误

据我了解,您正在尝试根据帖子所属的标签查询帖子。

除非您在发布表上有一个tag_name列,否则您要做的第一件事就是您要查询发布表的tag_name而不是标签表。

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'));
}

您需要做的就是根据标签名称查询标签。 然后急于加载所有标签。 您也不需要控制器中的条件语句。 您可以在刀片服务器模板中有一个条件语句,如下所示:

@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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM