web-dev-qa-db-fra.com

Laravel contient

J'utilise la méthode Laravel contains sur une collection https://laravel.com/docs/5.3/collections#method-contains . Mais ça ne marche pas pour moi.

foreach ($this->options as $option) {
    if($options->contains($option->id)) {
        dd('test');
    }
}

dd($options); ressemble à ceci:

Collection {#390
  #items: array:1 [
    0 => array:3 [
      0 => array:7 [
        "id" => 10
        "slug" => "test"
        "name" => "test"
        "poll_id" => 4
        "created_at" => "2016-11-12 20:42:42"
        "updated_at" => "2016-11-12 20:42:42"
        "votes" => []
      ]
      1 => array:7 [
        "id" => 11
        "slug" => "test-1"
        "name" => "test"
        "poll_id" => 4
        "created_at" => "2016-11-12 20:42:42"
        "updated_at" => "2016-11-12 20:42:42"
        "votes" => []
      ]
      2 => array:7 [
        "id" => 12
        "slug" => "test-2"
        "name" => "test"
        "poll_id" => 4
        "created_at" => "2016-11-12 20:42:42"
        "updated_at" => "2016-11-12 20:42:42"
        "votes" => []
      ]
    ]
  ]
}

Le résultat de dd($option->id); est 10.

Qu'est-ce qui ne va pas? Ou existe-t-il une meilleure façon?

13
Jamie

Vous devez transmettre une paire clé/valeur à la méthode contains, qui déterminera si la paire donnée existe dans la collection.

Vous devez utiliser la méthode contains() de cette manière:

foreach ($this->options as $option) {
  // Pass key inside contains method
  if($option->contains('id', $option->id)) {
      dd('test');
  }
}

J'espère que cela t'aides

27
Saumya Rastogi

Utilisez ce qui suit, qui indique Laravel que vous souhaitez faire correspondre l'id):

$options->contains('id', $option->id);

Documents

11
Jan Willem
foreach ($this->options as $option) {
    if(!$options->flatten(1)->where('id',$option->id)->isEmpty()) {
        dd('test');
    }
}
0
Don