我有帖子模型和标签模型我需要做一个搜索查询,所以用户输入标签,然后功能采取这个标签,并显示所有相关的帖子,所以它是多对多的关系船舶帖子属于许多标签和标签所属到很多帖子所以我宣布关系船但我找不到一种方法来使关系船的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_resualt' , ['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');
}
我的问题是如何正确地执行搜索查询而不会出错
注意:有一个搜索字段,用户只会写标签,所以我应该接受这个标签的输入,然后查找相应的帖子然后我会将它显示给用户
EDIT
我的搜索功能
public function search()
{
$q = Input::get ( 'q' );
//我使用了get因为我想要所有属于同一个标签的帖子$ posts = Tagged :: where('tag_name','LIKE','%' . $ q . '%') - > with('posts “) - >获得(); DD($个); if(count($ posts)> 0)return view('guest.blog.search_resualt',['title'=>'Resaults']) - > withDetails($ posts) - > withQuery($ q); else return view('guest.blog.no_resault',['title'=>'Resaults']) - > withMessage('No Details found'); }
我的标记和帖子模型是一样的
我在数据库中添加了一个表,它的名称是post_tagged,在其中我必须coloumns post_id和tagged_id所以如果你没有创建它就会发生这个关系,它会抛出sql状态错误
1 回答
根据我的理解,您正在尝试根据他们所属的标签查询帖子 .
除非你的帖子表上有tag_name列,否则你做错的第一件事就是你要查询post表tag_name而不是tag表 .
您需要做的是根据标记名称查询标记 . 然后eager load所有标签帖子 . 您也不需要控制器中的条件语句 . 您可以在刀片模板中使用条件语句,如下所示: