gpt4 book ai didi

mysql - Laravel 5.7 - when() 函数内的高级 where() 查询

转载 作者:行者123 更新时间:2023-11-29 15:34:10 25 4
gpt4 key购买 nike

我在使用来自多个表单输入的值的查询时遇到问题,并且每个输入都是可选的。

这个想法是找到分配给技术人员的 ISP 应用程序(即技术服务、安装等)。

由于输入是可选的,我使用 ->when() 函数来避免使用 NULL 值进行查询。

但我还需要使用技术人员的 ID 查找应用程序,该 ID 与相关应用程序 ID 一起存储在数据透视表中。

这是 Controller 中的代码

$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 是数据透视表中技术人员的 ID solicitud_tecnico

问题是当我尝试按技术人员搜索应用程序时,它会出现下一个错误。

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'tec_id' in 'where clause' (SQL: SELECT * FROM solicitudes WHERE EXISTS (SELECT* FROM tecnicos INNER JOIN solicitud_tecnico ON tecnicos.tec_id = solicitud_tecnico.tecnico_tec_id WHERE solicitudes.sol_id = solicitud_tecnico.solicitud_sol_id) AND tec_id = 8 AND 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();

示范律师(申请)

<?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');
}
}

Model 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');
}
}

我无法弄清楚错误是什么。

最佳答案

我认为这可能是因为 tecnico_tec_id 字段是数据透视表的一部分造成的。您是否尝试过在 whereHas 闭包内查询它?

$finalizadas = Solicitud::where('sol_estado', 4)
->when($tecnico, function ($query) use ($tecnico) {
return $query->whereHas('tecnicos', function ($query) use ($tecnico) {
$query->where('tecnico_tec_id', $tecnico);
});
}, function ($query) {
return $query->has('tecnicos');
})
->when($desde, function ($query) use ($desde, $hasta) {
return $query->whereBetween('sol_fecha_finalizada', [$desde, $hasta]);
})
->when($tipo, function ($query) use ($tipo) {
return $query->where('sol_tipo_solicitud', $tipo);
})
->when($tecnico, function ($query) use ($tecnico) {
return $query->where('tecnico_tec_id', $tecnico);
})
->when($cliente, function ($query) use ($cliente) {
return $query->where('sol_cliente', $cliente);
})
->get();

关于mysql - Laravel 5.7 - when() 函数内的高级 where() 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58422149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com