eloquent orm 的 with() 方法不能与其他方法一起使用

问题描述 投票:0回答:1

我正在尝试将 Laravel 8 项目中的关系转换为雄辩的 Orm。这是一个简单的关系,但我不知道为什么当我尝试过滤查询时,我在第二个表中得到空值。

我的模型 Cita:(英语预约)

class Cita extends Model {
    use HasFactory;

    protected $table = 'citas';

    public function user() {
        return $this->BelongsTo(User::class, 'id_vete', 'id');
    }

    public function evento() {
       return $this->belongsTo(Evento::class, 'id_evento', 'id');
    }

My Model Evento:(英语活动)

class Evento extends Model {

    use HasFactory;

    protected $table = 'eventos';

    public function user(){
        return $this->belongsTo(User::class, 'id_usu', 'id');
    }

    public function citas() {
        return $this->hasMany(Cita::class, 'id_evento', 'id');
    }

我原来的 CitaController 工作没有问题:

 public function index(){

        $idVete = session('user_id'); // Get the ID of the current User

       $citas = Cita::where('id_vete', $idVete)
        ->join('eventos', 'eventos.id', '=', 'citas.id_evento')
        ->join('clientes', 'clientes.dni', '=', 'citas.dni_cliente')
        ->select('citas.id AS cita_id', 'citas.dia', 'citas.hora', 'citas.descripcion', 'citas.active',
          'clientes.first_nm', 'clientes.last_nm', 'clientes.dni', 'clientes.email', 'clientes.phone', 
          'servicios.id', 'servicios.nm_evento')
        ->get();

我基本上想要这个:

$citas = Cita::with(['evento', 'user'])->get();

结果: [ { “id”:3, “id_vete”:2, “id_evento”:2, "dni_cliente": "65495321", “直径”:“2023-03-16”, "时间": "19:00:00", ETC... “甚至”: { “id”:2, “id_usu”:2, ETC... }, “用户”:{ “id”:2, “名称”:“管理员”, ETC... }

但是当我尝试放置一些过滤器加上 with() 方法时

$citas = Cita::with(['evento', 'user'])->where('id_vete', $idVete)->get();

我得到: []

eloquent orm laravel-8
1个回答
0
投票

尝试使用这个

$citas = Cita::with('user')->with(['evento' => function($q) use($idVete) { 
       $q->where('id', $idVete);
}])->get();

或者

$citas = Cita::with(['evento', 'user'])->where('evento.id_vete', $idVete)->get();
© www.soinside.com 2019 - 2024. All rights reserved.