检查是否有关系laravel 5.6是否为空?

时间:2018-07-27 21:17:59

标签: php laravel

我得到了一个具有encuesta关系的表encuesta_pregunta,该表encuesta_preguntaencuesta_respuesta有关系,它返回了这个

  "id": 4,
  //...table info...
  "encuesta_preguntas": [
    {
      "id": 10,
      "encuesta_id": 4,
      "pregunta_id": 5,
      //...table info....
      "encuesta_respuestas": [
        //this relationship can be empty
      ]
    },
    {
      "id": 11,
      "encuesta_id": 4,
      "pregunta_id": 3,
      //...table info....
      "encuesta_respuestas": [

      ]
    },
    {
      "id": 12,
      "encuesta_id": 4,
      "pregunta_id": 2,
      //...table info....
      "encuesta_respuestas": [

      ]
    }
  ]
}

有没有一种方法可以进行检查,而无需遍历每个encuesta_preguntas来知道encuesta_respuesta是否为空?

这样得到上面的回复

$encuesta = Encuesta::with(['encuestaPreguntas' => function($preguntas) {
            $preguntas->with(['encuestaRespuestas' => function($respuestas) {
                $respuestas->where('user_id','=',auth()->id());
            }]);
        }])->where('fecha_inicio','<=',date('Y-m-d'))
        ->where('fecha_fin','>',date('Y-m-d'))
        ->first();

1 个答案:

答案 0 :(得分:0)

首先。您可以使用Laravel配件

public function getHasEncuestasAttribute()
{
    return $this->encuesta_pregunta != [];
}

当您执行$model->has_encuestas时,如果关系不为空,它将变为true。

第二。使用关系方法hasdoesntHave。如果要获取所有具有空关系的encuesta,则可以调用Encuesta::doesntHave('encuesta_pregunta')或没有空关系的对立Encuesta::has('encuesta_pregunta')