我正在尝试过滤"服务"一个"技术"按年和月,我得到一个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()}}
答案 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')));
}