Get value by column name value

Ny array looks something like this:

Illuminate\Database\Eloquent\Collection {#2052 ▼
  #items: array:3 [▼
    0 => App\Models\NewsMeta {#2089 ▶}
    1 => App\Models\NewsMeta {#2090 ▶}
    2 => App\Models\NewsMeta {#2091 ▶}
  ]
} 

If I open up the array 2:

 #original: array:7 [▼
        "id" => 17
        "post_id" => 240231
        "news_tag_id" => 5
        "meta_name" => "_thumbnail_id"
        "meta_value" => "240232"
        "created_at" => "2020-08-06 22:34:06"
        "updated_at" => "2020-08-06 22:34:06"
      ]

Now, I looking to get value "240232" given that I've 240231.

How do I search inside array of the object?
Something like: where post_id is 240231 get ts meta_value.

FYI: It's not eloquent or DB query.

2 answers

  • answered 2020-08-06 23:36 Wesley Smith

    Something like this should work:

            $postId = 240231;
            $metaValue = null;
            foreach ($collection as $model) {
                if ($model->post_id == $postId) {
                  $metaValue = $model->meta_value;
                  break;
                }
            }
            echo $metaValue;
    

    You could also use the collection's seach method:

        $postId = 240231;
        $metaValue = $collection->search(static function($model, $key) use($postId) {
            if ($model->post_id == $postId) {
                return $model->meta_value;
            }
        });
        echo $metaValue;
    

  • answered 2020-08-07 01:35 Pablo

    You can use the collection firstWhere() method

    $collection->firstWhere('post_id', '240231')['meta_value'] ?? null;
    

    With the data you provided this should return 240232. In a dataset where there is no post_id = 240231 it would return null.