Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

288
Vistas
Laravel: reemplaza nulo con una matriz vacía cuando no se encuentra una relación

¿Es posible reemplazar nulo con una matriz vacía cuando no se encuentra ninguna relación?

Ej. El cliente tiene contactos y contratos pero uno de los contratos no tiene web.

 $customers = Customer::with('contacts', 'contracts.web') ->orderBy('company')->orderBy('prename')->get();

El resultado seria el siguiente...

 2 => array:21 [ "id" => 1 "contacts" => array:2 [ 0 => array:12 [ "id" => 1 "customer_id" => 1 ] 1 => array:12 [ "id" => 2 "customer_id" => 1 ] ] "contracts" => array:2 [ 0 => array:9 [ "id" => 1 "customer_id" => 1 "web" => array:7 [ "id" => 1 "contract_id" => 1 ] ] 1 => array:9 [ "id" => 2 "customer_id" => 1 "web" => null // should be replaced with [] ] ] ]

Como leí en los documentos ( Restricción de cargas ansiosas), solo es posible manipular la consulta con restricciones de cargas ansiosas.

ACTUALIZAR

clase de contrato

 class Contract extends Model { public function web() { return $this->hasOne(Web::class); } }
about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Para más lectores aquí hay una explicación de cómo resolver este tipo de problema.

Laravel devuelve una matriz vacía si no se encuentran registros en una relación hasMany . Si se implementa una relación hasOne , se devolverá nulo.

Entonces, si necesita una matriz también si no se encuentra ningún registro en una relación hasOne, debe hacer lo siguiente.

 class Contract extends Model { public function web() { return $this->hasOne(Web::class) ->withDefault(function () { return new Web(); }); } }

Implementado de esta manera, no es posible devolver una matriz vacía. Por qué esto no es posible, consulte este problema en Laravel GitHub Issue Tracker.

Hay un código existente que depende del resultado de cualquier relación Eloquent para que sea nulo, una instancia de Modelo o una Colección de instancias de Modelo. Sin embargo, la funcionalidad actual del método withDefault() abre la posibilidad de devolver un objeto que no es uno de esos tres valores esperados.

Si devuelve un nuevo \stdClass; o una matriz vacía, se devuelve una instancia vacía de web. Para obtener una matriz vacía, simplemente instancia un nuevo Objeto de la clase de relación. En mi caso nueva Web();.

about 4 years ago · Santiago Trujillo Denunciar

0

Su método de relación debe ser el que maneje esto, ya que es el primer lugar donde puede solucionarlo.

Revisé esto para que devuelva una matriz cuando la variable es nula.

 public class Contracts{ public function web(){ $collection = $this->hasMany('App\Web'); return $collection ? $collection : []; } }
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda