在Laravel中,我在EventsController中使用以下代码:
public function index()
{
$search = Input::get('search');
$searchResult = Events::orderBy($order, $by)->where(function ($query) use ($search)
{
$query->where('name', 'LIKE', '%'. $search .'%')
->orWhere('date', 'LIKE', '%'. $search .'%')->get();
})->Paginate(10);
$search = str_getcsv($search, ' ');
if (in_array("january", $search)) {
$searchResult = Events::orderBy($order, $by)->where('date', 'LIKE', '%2015-01'%')->Paginate(10);
}
if (in_array("february", $search)) {
$searchResult = Events::orderBy($order, $by)->where('date', 'LIKE', '%2015-02'%')->Paginate(10);
}
return View::make('events.index')
->with('events', $searchResult)
->with('search', $search);
}
代码实际上是有效的但是当然这是不好的做法。我将日期存储在我的数据库中,如下所示:
2015-07-30(Y-m-d)
我想要完成的是,当我搜索" 1月"在我的搜索中,它应显示1月(2015-01-xx)的所有结果。二月相同,等等。
使用上面的代码我可以完成这个,但我需要复制所有12个月的相同代码。这不好。有关为此目的更好地编写代码的任何帮助吗?还有其他任何提示或技巧吗?我发布此信息仅用于学习目的。
问题#2。我希望能够搜索" 1月1日"例如。关于如何实现这一目标的任何帮助或建议?
答案 0 :(得分:2)
摆脱IF的最简单方法可能是在月份名称和月份数之间引入映射,例如:
$month = 'january'; // february, march, ...
$monthNumber = date('m', strtotime($month);
$searchResult = Events::orderBy($order, $by)->where('date', 'LIKE', '%2015-' . $monthNuber . '%')->Paginate(10);