У меня проблемы с запросом, который использует значения из нескольких входов формы, и каждый из них является необязательным.
Идея состоит в том, чтобы найти приложения ISP (т. Е. Технические службы, установки и т. Д.)назначен технику.
Поскольку входные данные являются необязательными, я использую функцию ->when()
, чтобы избежать запросов со значениями NULL
.
Но также мне нужно найти приложенияиспользуя идентификатор технического специалиста, этот идентификатор сохраняется в сводной таблице с идентификатором соответствующего приложения.
Это код в контроллере
$finalizadas = Solicitud::whereHas('tecnicos')
->when($desde, function ($query) use ($desde, $hasta) {
return $query->whereBetween('sol_fecha_finalizada', [$desde, $hasta])->where('sol_estado', 4);
})
->when($tipo, function ($query) use ($tipo) {
return $query->where('sol_tipo_solicitud', $tipo)->where('sol_estado', 4);
})
->when($tecnico, function ($query) use ($tecnico) {
return $query->where('tecnico_tec_id', $tecnico)->where('sol_estado', 4);
})
->when($cliente, function ($query) use ($cliente) {
return $query->where('sol_cliente', $cliente)->where('sol_estado', 4);
})->get();
return view('solicitudes.listar_finalizadas')->with('finalizadas', $finalizadas);
sol_estado = 4 означает завершение приложения.
tecnico_tec_id - это идентификатор техника в сводной таблице solicitud_tecnico
Проблема заключается в том, что при попытке поиска приложений по технику возникает следующая ошибка.
SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец 'tec_id' в 'предложении where' (SQL: SELECT * FROM solicitudes
ГДЕ СУЩЕСТВУЕТ (SELECT * FROM tecnicos
INNER JOIN * 1025)* ON tecnicos
. tec_id
= solicitud_tecnico
. tecnico_tec_id
ГДЕ solicitudes
. sol_id
= solicitud_tecnico
. solicitud_sol_id
) И tec_id
= 8 И sol_estado
= 4)
Это утверждение, хотя и внутри отношений, оно не работает
->when($tecnico, function ($query) use ($tecnico) {
return $query->where('tecnico_tec_id', $tecnico)->where('sol_estado',4);
})
, но это работает как очарование
$finalizadas = Solicitud::whereHas('tecnicos', function ($query) use ($tecnico) {
$query->where('tecnico_tec_id', $tecnico)->where('sol_estado', 4);
})->get();
Модель Solicitud (Приложение)
<?php
namespace OPyME2;
use Illuminate\Database\Eloquent\Model;
class Solicitud extends Model
{
// Nombre de la tabla
protected $table = 'solicitudes';
// Primary key
protected $primaryKey = 'sol_id';
// Marcas de fecha
public $timestamps = false;
// Columnas
protected $fillable = ['sol_id','sol_fecha_creacion','sol_fecha_traslado','sol_fecha_retiro','sol_fecha_finalizada','sol_horario','sol_cliente','sol_estructura', 'sol_plan', 'sol_escalera', 'sol_tecnico_asignado', 'sol_estado', 'sol_motivo', 'sol_zona_gps', 'sol_telefono_2', 'sol_domicilio_traslado', 'sol_creacion', 'sol_tipo_solicitud', 'sol_pedido_material
'];
// Pivot
public function tecnicos()
{
return $this->belongsToMany('\OPyME2\Tecnico', 'solicitud_tecnico')
->withPivot('solicitud_sol_id');
}
}
Модель Tecnico (Техник)
<?php
namespace OPyME2;
use Illuminate\Database\Eloquent\Model;
class Tecnico extends Model
{
// Nombre de la tabla
protected $table = 'tecnicos';
// Primary key
protected $primaryKey = 'tec_id';
// Marcas de fecha
public $timestamps = false;
// Columnas
protected $fillable = ['tec_id', 'tec_nombre', 'tec_activo', 'tec_movil'];
// Pivot
public function solicitudes()
{
return $this->belongsToMany('\OPyME2\Solicitud', 'solicitud_tecnico')
->withPivot('tecnico_tec_id');
}
public function moviles()
{
return $this->belongsToMany('\OPyME2\Movil', 'movil_tecnico')
->withPivot('tecnico_tec_id');
}
}
Я не могу понять, в чем ошибка.