2015-05-28 2 views
1

У меня проблема с выбором пользователей между диапазоном возраста, когда дата рождения поля в базе данных является типом date like 1989-09- 20.Laravel 5: Получить пользователей между диапазоном времени от поля даты

Запрос

DB::raw("*, ( 
     3959 * acos( 
     cos(radians(?)) 
     * cos(radians(latitude)) 
     * cos(radians(longitude) - radians(?)) 
     + sin(radians(?)) 
     * sin(radians(latitude))) 
    ) AS distance")) 
->having('distance', '<', $distance) 
->orderBy("distance") 
->setBindings([$lat, $lng, $lat]) 
->whereHas('user', function($q) { 
    $q->whereBetween('date_of_birth',array(Input::get('age_from'),Input::get('age_to'))) 
     ->where('gender',Input::get('gender')) 
     ->where('title','LIKE','%'.Input::get('title').'%'); 
}) 
->with('user') 
->get(); 

Я пытаюсь поворачивая date_of_birth атрибут в течение ряда лет с использованием углерода в модели пользователя, но не работает, потому что до сих пор принимает в запросе формат даты и а не числа лет.

модель пользователя

<?php namespace App; 

use Illuminate\Auth\Authenticatable; 
use Illuminate\Database\Eloquent\Model; 
use Illuminate\Auth\Passwords\CanResetPassword; 
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; 
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract; 

class User extends Model implements AuthenticatableContract, CanResetPasswordContract { 

    public function getDateOfBirthAttribute() 
    { 
     $ca = \Carbon\Carbon::parse($this->attributes['date_of_birth']); 

     return $ca->diffInYears(); 
    } 

} 

Я надеюсь, что вы можете мне помочь.

ответ

0

Я нашел решение и должен использовать это соединение.

$q->whereBetween(DB::raw('TIMESTAMPDIFF(YEAR,users.date_of_birth,CURDATE())'),array(Input::get('age_from'),Input::get('age_to')));