withpivot with wherepivot updateexistingpivot hasone examples example attach laravel orm eloquent relational-database relationship

with - wherepivot laravel



Laravel: “Has”, “With”, “WhereHas”, ¿qué significan? (1)

Con

with() es para cargar con ansias . Eso básicamente significa que, a lo largo del modelo principal, Laravel precargará las relaciones que especifique. Esto es especialmente útil si tiene una colección de modelos y desea cargar una relación para todos ellos. Porque con la carga ansiosa, ejecuta solo una consulta de base de datos adicional en lugar de una para cada modelo de la colección.

Ejemplo:

User > hasMany > Post

$users = User::with(''posts'')->get(); foreach($users as $user){ $users->posts; // posts is already loaded and no additional DB query is run }

Tiene

has() es para filtrar el modelo de selección en función de una relación. Por lo tanto, actúa de manera muy similar a una condición normal de WHERE. Si solo usa has(''relation'') eso significa que solo desea obtener los modelos que tienen al menos un modelo relacionado en esta relación.

Ejemplo:

User > hasMany > Post

$users = User::has(''posts'')->get(); // only users that have at least one post are contained in the collection

Donde tiene

whereHas() funciona básicamente igual que has() pero le permite especificar filtros adicionales para que el modelo relacionado los verifique.

Ejemplo:

User > hasMany > Post

$users = User::whereHas(''posts'', function($q){ $q->where(''created_at'', ''>='', ''2015-01-01 00:00:00''); })->get(); // only users that have posts from 2015 on forward are returned

He encontrado que el concepto y el significado detrás de estos métodos son un poco confusos, ¿es posible que alguien me explique cuál es la diferencia entre has y with , en el contexto de un ejemplo (si es posible)?