Laravel-wymowne "ma", "Z", "gdzie" - co oznaczają?

Uznałem, że koncepcja i znaczenie tych metod są nieco mylące, czy jest możliwe, aby ktoś mi wyjaśnił, jaka jest różnica między has i with, w kontekście przykładu (jeśli to możliwe)?

Author: lukasgeiter, 2015-05-14

1 answers

Z

with() jest dla eager loading. Oznacza to, że w głównym modelu Laravel załaduje wstępnie określone relacje. Jest to szczególnie przydatne, jeśli masz kolekcję modeli i chcesz załadować relację dla wszystkich z nich. Ponieważ przy eager loading uruchamiasz tylko jedno dodatkowe zapytanie DB zamiast jednego dla każdego modelu w kolekcji.

Przykład:

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
}

MA

has() jest filtrowanie wybór modelu na podstawie relacji. Działa więc bardzo podobnie do normalnego stanu gdzie. Jeśli użyjesz has('relation'), oznacza to, że chcesz uzyskać tylko modele, które mają co najmniej jeden powiązany model w tej relacji.

Przykład:

User > hasMany > Post

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

WhereHas

whereHas() działa zasadniczo tak samo jak has(), ale pozwala określić dodatkowe filtry dla powiązanego modelu do sprawdzenia.

Przykład:

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
 332
Author: lukasgeiter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-25 07:07:52