Laravel collection contains

回眸只為那壹抹淺笑 提交于 2020-01-12 04:30:21

问题


I'm using the Laravel contains method on a collection https://laravel.com/docs/5.3/collections#method-contains. But it does not work for me.

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

dd($options); looks like this:

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

Result of dd($option->id); is 10.

What could be wrong? Or is there a better way?


回答1:


You should pass a key / value pair to the contains method, which will determine if the given pair exists in the collection.

You should use contains() method in this way:

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

Hope this helps




回答2:


Use the following, which tells Laravel you want to match the 'id':

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

Docs




回答3:


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


来源:https://stackoverflow.com/questions/40566972/laravel-collection-contains

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!