Saltar al contenido

Laravel comprueba si existe un modelo relacionado

Si encuentras algún detalle que no entiendes puedes dejarlo en la sección de comentarios y te responderemos tan rápido como podamos.

Solución:

En PHP 7.2+ no puedes usar count en el objeto de relación, por lo que no hay un método único para todas las relaciones. Use el método de consulta en su lugar como @tremby proporcionado a continuación:

$model->relation()->exists()

solución genérica que trabaja en todos los tipos de relación (antes de php 7.2):

if (count($model->relation))

  // exists

Esto funcionará para todas las relaciones ya que las propiedades dinámicas regresan Model o Collection. Ambos implementan ArrayAccess.

Así que va así:

relaciones simples:hasOne / belongsTo / morphTo / morphOne

// no related model
$model->relation; // null
count($model->relation); // 0 evaluates to false

// there is one
$model->relation; // Eloquent Model
count($model->relation); // 1 evaluates to true

relaciones a-muchos:hasMany / belongsToMany / morphMany / morphToMany / morphedByMany

// no related collection
$model->relation; // Collection with 0 items evaluates to true
count($model->relation); // 0 evaluates to false

// there are related models
$model->relation; // Collection with 1 or more items, evaluates to true as well
count($model->relation); // int > 0 that evaluates to true

Un objeto de relación pasa llamadas de métodos desconocidos a través de un generador de consultas Eloquent, que está configurado para seleccionar solo los objetos relacionados. Ese constructor, a su vez, pasa las llamadas de métodos desconocidos a su Generador de consultas subyacente.

Esto significa que puede utilizar el exists() o count() métodos directamente desde un objeto de relación:

$model->relation()->exists(); // bool: true if there is at least one row
$model->relation()->count(); // int: number of related rows

Tenga en cuenta los paréntesis después relation: ->relation() es una llamada de función (obteniendo el objeto de relación), a diferencia de ->relation que Laravel configuró un captador de propiedades mágicas para usted (obteniendo el objeto / objetos relacionados).

Utilizando el count método en el objeto de relación (es decir, usando los paréntesis) será mucho más rápido que hacer $model->relation->count() o count($model->relation) (a menos que la relación ya se haya cargado) ya que ejecuta una consulta de conteo en lugar de extraer todos los datos de cualquier objeto relacionado de la base de datos, solo para contarlos. Así mismo, usando exists tampoco necesita extraer datos del modelo.

Ambas cosas exists() y count() trabajar en todos los tipos de relaciones que he probado, así que al menos belongsTo, hasOne, hasManyy belongsToMany.

prefiero usar exists método:

RepairItem::find($id)->option()->exists()

para comprobar si existe o no un modelo relacionado. Está funcionando bien en Laravel 5.2

Sección de Reseñas y Valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *