[英]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_id
和tagged_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.