如何按年份过滤并将带有laravel的时间戳类型的属性转换为DB?

时间:2014-05-09 20:24:19

标签: php sql laravel laravel-4

我正在尝试过滤"服务"一个"技术"按年和月,我得到一个ID来找到"技术"。所有这些都是通过嵌套查询完成的 。我的问题是我不知道如何使用laravel按年和蛾同时过滤 我的代码:

控制器

    public function doFilter(){
    $servicios = Tecnico::find(Input::get('id'))
                ->servicios //services
                ->where('timestamp', Input::get('ano').'-'.Input::get('mes'));// ano=year, mes=moth
    return View::make('detalletecnico', array('servicios' => $servicios, 'id' => Input::get('id')));            

    }

TechnicalModel

class Tecnico extends Eloquent{
protected $table = 'Tecnico';
protected $primaryKey = 'idTecnico';
protected $hidden = array('Contrasena');
protected $fillable = array(
                            'idTecnico',
                            'Nombre',
                            'Apellido',
                            'Telefono',
                            'Contrasena',
                            'Foto',
                            );
public function servicios(){
    return $this->belongsToMany('Servicio', 'Servicio_Tecnico', 'Tecnico_idTecnico', 'Servicio_idServicio');
}

}

ServiceModel

class Servicio extends Eloquent{
protected $table = 'Servicio';
protected $primaryKey = 'idServicio';
protected $fillable = array(
                            'Direccion',
                            'RutaPDF',
                            'Completado',
                            'timestamp'
                            );
public function materialUsado(){
    return $this->hasMany('Material_Usado', 'idMaterial_Usado');
}

public function tecnicos(){
    return $this->belongsToMany('Tecnico', 'Servicio_Tecnico', 'Servicio_idServicio', 'Tecnico_idTecnico');
}
}

路线

Route::get('tecnico/detalle/filter', array('uses' => 'TecnicoController@doFilter'));

刀片

            {{Form::open(array('url' => 'tecnico/detalle/filter'))}}
        {{Form::select('mes', array('Enero', 
                                        'Febrero', 
                                        'Marzo', 
                                        'Abril', 
                                        'Mayo', 
                                        'Junio',
                                        'Julio',
                                        'Agosto',
                                        'Septiembre',
                                        'Octubre',
                                        'Noviembre',
                                        'Diciembre'), array('class' => 'input-xlarge'))}}

        {{Form::select('ano', array(date('Y'),
                                    '2013', 
                                    '2012' 
                                    ), array('class' => 'input-xlarge'))}}
        {{ Form::hidden('id', $id) }}                       
        {{ Form::submit('Filtrar', array('class' => 'btn btn-primary')) }}  
        {{Form::close()}}

3 个答案:

答案 0 :(得分:1)

您可能会尝试使用原始轮廓以及MySql中的YEAR和MONTH函数:

$servicios = Tecnico::find(Input::get('id'))
            ->servicios()
            ->whereRaw('YEAR(timestamp) = ?', array(Input::get('ano')))
            ->whereRaw('MONTH(timestamp) = ?', array(Input::get('mes')))
            ->get();

答案 1 :(得分:0)

如果我说得对,那么这就是你想要的:

$servicios = Tecnico::find(Input::get('id'))
                ->servicios()
                ->where('timestamp', 'like', Input::get('ano').'-'.Input::get('mes'))
                ->get();

当然,select中的月数组必须有数字作为键,如下所示:

array('01' => 'Enero, '02' => 'Febrero' ...)

答案 2 :(得分:0)

使用日期范围过滤:

public function doFilter()
{
    $inicio = \Carbon\Carbon::createFromDate(Input::get('ano'), Input::get('mes'), 1);

    $fim = $start->copy()->lastOfMonth()->hour(23)->minute(59)->second(59);

    $servicios = Tecnico::find(Input::get('id'))
                ->servicios()
                ->where('timestamp', '>=' $inicio)
                ->where('timestamp', '<=' $fim)
                ->get();

   return View::make('detalletecnico', array('servicios' => $servicios, 'id' => Input::get('id')));            
}