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
, hasMany
y 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