Dans mon projet Laravel, je construis une requête avec des conditions. Il y a un problème que je ne peux pas comprendre

J'ai une requête qui se présente comme suit

$query = SocialMediaFeed::where('location_id', $location_id);

Maintenant, il y a des éléments de fil qui ont 'self' = true .. Ceux-ci devraient être ignorés des résultats au début, sauf s'il y a un tableau $ filters.

if(!$filters) {
    $query = $query->where('self', '<>', true);
}

Maintenant, je me demande, s'il y a des filtres, cela devrait inclure les données que j'ai quand moi n'est pas égal à vrai, mais aussi les données si c'est vrai.

J'ai essayé ce qui suit, Mais cela ne renvoie que les messages self = true, au lieu de tous les messages combinés avec self = true

$query = $query
    ->where('self', '<>', true)
    ->where('self', true)
    ->orWhereNull('self');
2
Miguel Stevens 9 août 2017 à 11:39

2 réponses

Donc, si vous avez des filtres, il n'y a rien à faire:

$query = SocialMediaFeed::where('location_id', $location_id);

if (!$filters) {
  $data= $query->where('self',true)->get();
} else {
  $data= $query->get();
}
0
Bara' ayyash 9 août 2017 à 08:45

Pour cela, vous pouvez utiliser Clauses conditionnelles:

// false: All social media feeds except where self is not true
// true: All social media feeds
$filters = false;
$query = SocialMediaFeed::where('location_id', $location_id)
->when(!$filters, function ($query) {
    return $query->where('self', '!=', true);
})->get();
3
Björn 9 août 2017 à 09:48