web-dev-qa-db-ja.com

Laravelコレクションには

コレクションでLaravel containsメソッドを使用しています https://laravel.com/docs/5.3/collections#method-contains 。しかし、私にはうまくいきません。

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

dd($options);は次のようになります。

_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" => []
      ]
    ]
  ]
}
_

dd($option->id);の結果は_10_です。

何が間違っているのでしょうか?または、より良い方法がありますか?

13
Jamie

キー/値のペアをcontainsメソッドに渡す必要があります。このメソッドは、指定されたペアがコレクションに存在するかどうかを判断します。

この方法で contains() メソッドを使用する必要があります。

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

お役に立てれば

27
Saumya Rastogi

次を使用して、Laravel 'id'に一致させたいことを伝えます。

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

ドキュメント

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