Laravel Eloquent ORM предоставляет мощный набор функций для работы с отношениями баз данных. Одной из таких функций является метод withCount, который позволяет вам получить количество связанных записей при извлечении основных записей. В этой статье мы рассмотрим расширенное использование метода withCountс условиями, позволяющими вам точнее настраивать запросы и получать более детальные подсчеты на основе определенных критериев.
Метод 1: базовое использование withCount
Метод withCountможно использовать в своей простейшей форме для получения количества связанных записей. Предположим, у нас есть модель Postс отношением один-ко-многим к модели Comment. Следующий код демонстрирует, как получить количество комментариев для каждого сообщения:
$posts = Post::withCount('comments')->get();
foreach ($posts as $post) {
echo "Post ID: " . $post->id . ", Comment Count: " . $post->comments_count . "\n";
}
Метод 2: применение условий к withCount
Для дальнейшего уточнения счетчиков на основе конкретных условий мы можем передать замыкание методу withCount. Давайте рассмотрим сценарий, в котором мы хотим получить количество одобренных комментариев для каждого сообщения. Вот код для этого:
$posts = Post::withCount(['comments' => function ($query) {
$query->where('approved', true);
}])->get();
foreach ($posts as $post) {
echo "Post ID: " . $post->id . ", Approved Comment Count: " . $post->comments_count . "\n";
}
Метод 3: использование нескольких условий для withCount
В некоторых случаях вам может потребоваться применить несколько условий для получения более конкретных значений. Вот пример, в котором мы получаем количество одобренных комментариев и комментариев с рейтингом выше 4:
$posts = Post::withCount(['comments' => function ($query) {
$query->where('approved', true)
->where('rating', '>', 4);
}])->get();
foreach ($posts as $post) {
echo "Post ID: " . $post->id . ", Approved High-Rated Comment Count: " . $post->comments_count . "\n";
}
Метод 4: добавление псевдонимов к запросам withCount
Иногда вам может потребоваться настроить имя столбца счетчика для лучшей читаемости. Laravel позволяет добавлять псевдонимы к запросам withCount. Вот пример:
$posts = Post::withCount([
'approvedComments as approved_comments_count' => function ($query) {
$query->where('approved', true);
},
'highRatedComments as high_rated_comments_count' => function ($query) {
$query->where('rating', '>', 4);
},
])->get();
foreach ($posts as $post) {
echo "Post ID: " . $post->id . ", Approved Comment Count: " . $post->approved_comments_count . ", High-Rated Comment Count: " . $post->high_rated_comments_count . "\n";
}
В этой статье мы рассмотрели расширенное использование метода withCountLaravel с условиями. Мы научились получать счетчики на основе определенных критериев, применять несколько условий и даже добавлять псевдонимы для улучшения читаемости. Использование этих методов позволит вам получить более точное и актуальное количество связанных записей в ваших приложениях Laravel.