PHP搜索函数字符串到数字转换(搜索月份)

时间:2015-07-30 09:52:52

标签: php laravel laravel-5 eloquent

在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日"例如。关于如何实现这一目标的任何帮助或建议?

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