Utilisation des Sous-requêtes Laravel
1. Utilisation de sous-requêtes dans les conditions
Les sous-requêtes peuvent être utilisées dans les conditions pour filtrer les résultats en fonction d'une autre requête.
Exemple:
$highScores = DB::table('players')
->where('score', '>', function ($query) {
$query->select('average_score')
->from('statistics')
->whereColumn('player_id', 'players.id')
->orderByDesc('created_at')
->limit(1);
})
->get();
2. Utilisation de sous-requêtes dans les jointures
Les sous-requêtes peuvent également être utilisées dans les jointures pour récupérer des données basées sur une condition issue d'une autre table.
Exemple:
$latestPosts = DB::table('posts')
->joinSub($latestComments, 'latest_comments', function ($join) {
$join->on('posts.id', '=', 'latest_comments.post_id');
})
->get();
3. Utilisation de sous-requêtes dans les sélections
Les sous-requêtes peuvent être utilisées pour sélectionner des données basées sur des conditions ou des valeurs d'autres tables.
Exemple:
$popularPosts = DB::table('posts')
->select('title',
DB::raw('(SELECT COUNT(*) FROM likes WHERE likes.post_id = posts.id) as likes_count'))
->orderByDesc('likes_count')
->get();
Opérateur whereHas
L'opérateur whereHas
permet de filtrer les modèles en fonction de la présence d'une relation spécifique.
Exemple :
$posts = Post::whereHas('comments', function ($query) {
$query->where('status', 'approved');
})->get();
Opérateur orWhereHas
L'opérateur orWhereHas
permet de filtrer les modèles en fonction de la présence d'une relation spécifique avec une condition "ou".
Exemple :
$posts = Post::orWhereHas('comments', function ($query) {
$query->where('status', 'approved');
})->get();
Opérateur doesntHave
L'opérateur doesntHave
récupère les modèles qui n'ont pas de relation spécifique.
Exemple :
$posts = Post::doesntHave('comments')->get();
Opérateur withCount
L'opérateur withCount
permet de récupérer le nombre de relations liées à un modèle.
Exemple :
$posts = Post::withCount('comments')->get();
foreach ($posts as $post) {
echo $post->title;
echo $post->comments_count;
}
Opérateur whereColumn
L'opérateur whereColumn
permet de comparer deux colonnes dans une table ou entre deux tables différentes.
Exemple :
$posts = Post::whereColumn('created_at', '>', 'updated_at')->get();
Opérateur orWhereColumn
L'opérateur orWhereColumn
permet de comparer deux colonnes dans une table ou entre deux tables différentes avec une condition "ou".
Exemple :
$posts = Post::orWhereColumn('created_at', '>', 'updated_at')->get();