public function getIndex()
{
// Get all the blog posts
/*$posts = Post::with(array(
'author' => function($query)
{
$query->withTrashed();
},
))->orderBy('created_at', 'DESC')->paginate(10);*/
$posts =Post::with(array('search' => function($query)
{
$query->where('title', 'like', '%Lorem ipsum%')->withTrashed();
}))->orderBy('created_at', 'DESC')->paginate(10);
// Show the page
return View::make('frontend/blog/index', compact('posts'));
}
这是我在Controller中的代码。我正在使用GitHub上提供的入门套件。
我为这个控制器创建了这个模型
public function search()
{
return $this->belongsTo('Post', 'user_id');
}
问题是它没有取得标题包含“Lorem ipsum”的结果。它只打印表中的所有值。
如何实现此功能以仅获取包含我的标记/关键字的值。我这样做是为了在laravel网站上添加搜索选项
答案 0 :(得分:9)
为什么不为此创建范围?你看过scopes docs了吗? 这是一个例子,我将如何实现这一目标:
范围:
public function scopeTagged($query, $tag)
{
return $query->where('title', 'LIKE', '%' . $tag . '%');
}
修改你的行动:
public function getIndex()
{
$posts = Post::tagged($lorem_ipsum)->withTrashed()->orderBy('created_at', 'DESC')->paginate(10);
// Show the page
return View::make('frontend/blog/index', compact('posts'));
}
答案 1 :(得分:1)
试试这个......
$posts =Post::with(array('search' => function($query)
{
$query->raw_where("title LIKE '%Lorem ipsum%")->withTrashed();
}))->orderBy('created_at', 'DESC')->paginate(10);
或者沿着这些方向......
$ search是您的输入
Post::raw_where("match (`title`) against (?)", array($search))
->orderBy('created_at', 'DESC')->paginate(10);
修改强>
这个怎么样?
Post::where(DB::raw('MATCH(`title`)'),'AGAINST', DB::raw('("+'.implode(' +',$search).'" IN BOOLEAN MODE)->orderBy('created_at', 'DESC')->paginate(10);
答案 2 :(得分:0)
我认为这是Laravel Eager加载Constraints实现的一个问题:
对于参考: -
https://github.com/laravel/laravel/pull/1069
https://github.com/laravel/laravel/pull/946