Nish Dekardo
Nish Dekardo

Reputation: 359

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.

Upvotes: 1

Views: 91

Answers (2)

Pablo
Pablo

Reputation: 6048

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.

Upvotes: 1

Wesley Smith
Wesley Smith

Reputation: 19561

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;

Upvotes: 3

Related Questions