Построитель запросов Laravel с функцией DATE mysql

Привет, у меня есть запрос в моем проекте laravel, который должен получать даты между диапазонами. Мой запрос:

 $dateFrom = date("Y-m-d", strtotime($request->dateFrom));
      $dateTo = date("Y-m-d", strtotime($request->dateTo));
      $posts = DB::table('posts')->join('categories','posts.category_id','=','categories.id')->
                join('users','posts.user_id','=','users.id')
                ->select('posts.id','posts.topic','categories.category_name','posts.created_at','users.name')
                ->whereBetween('posts.created_at',[$dateFrom,$dateTo])
                ->get();

Я хотел бы использовать функцию DATE mysql_function в столбце posts.created_at, но я не знаю, как это сделать. Ниже запрос не работает:

$dateFrom = date("Y-m-d", strtotime($request->dateFrom));
      $dateTo = date("Y-m-d", strtotime($request->dateTo));
       $posts = DB::table('posts')->join('categories','posts.category_id','=','categories.id')->
                join('users','posts.user_id','=','users.id')
                ->select('posts.id','posts.topic','categories.category_name','posts.created_at','users.name')
                ->whereBetween('DATE(posts.created_at)',[$dateFrom,$dateTo])
                ->get();

Буду признателен за помощь. С наилучшими пожеланиями ;)


person Krzysztof Michalski    schedule 28.06.2017    source источник
comment
почему бы вам не использовать два whereDate вместо этого. .? что-то вроде ->whereDate('posts.created_at', '>=', $dateFrom)->whereDate('posts.created_at', '<=', $dateTo). я знаю, что это слишком многословно, но тогда .. самый простой способ ..   -  person Bagus Tesa    schedule 28.06.2017


Ответы (2)


изменить ->whereBetween('DATE(posts.created_at)'

to ->whereBetween(DB::raw('DATE(posts.created_at)'))

если вы хотите добавить какое-то необработанное выражение в запрос, вы можете использовать метод DB::row, как указано в laravel документация

person wahdan    schedule 28.06.2017

Попробуйте использовать Carbon следующим образом:

use Carbon\Carbon;
...

$dateFrom = Carbon::parse($request->dateFrom);
$dateTo = Carbon::parse($request->dateTo);
$posts = DB::table('posts')
    ->join('categories','posts.category_id','=','categories.id')
    ->join('users','posts.user_id','=','users.id')
    ->select('posts.id','posts.topic','categories.category_name','posts.created_at','users.name')
    ->whereBetween('posts.created_at',[$dateFrom,$dateTo])
    ->get();
person DevK    schedule 28.06.2017