Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

kennethjaysone's avatar

Eloquent Query relationship using with() method getting 1 record from related model

I have an eloquent model for cars called Car.php and media (images) called Media.php and have set the following relationships.

Car.php

public function thumbnail() {
    return $this->hasMany('App\Media', 'content_id')->where('media.key', '=', 'thumbnail');
}

Media.php

public function car() {
    return $this->belongsTo('App\Car');
}

Now in the query when run

$cars = Car::with('thumbnail')->get();

I get

[
    {
        "id": 10,
        "user_id": 3,
        "title": "BMW M3 for sale",
        "make_id": 6,
        "model_id": 137,
        "cubic_capacity": 4000,
        "state_id": 4,
        "area_id": 121,
        "manufacture_year": 2015,
        "mileage": 100000,
        "transmission_id": 2,
        "car_type_id": 2,
        "body_type_id": 4,
        "description": "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod\r\ntempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,\r\nquis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo\r\nconsequat. Duis aute irure dolor in reprehenderit in voluptate velit esse\r\ncillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non\r\nproident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
        "listing_stage_id": 2,
        "listing_status_id": 1,
        "expired": 0,
        "premium": 0,
        "price": 400000,
        "created_at": "2015-08-05 09:30:23",
        "updated_at": "2015-08-05 09:30:23",
        "thumbnail": [
            {
                "id": 41,
                "content_type_id": 1,
                "content_id": 10,
                "key": "thumbnail",
                "value": "HJdsJ-1438767025-vorsteiner-gtrs3-1.jpg",
                "original": "vorsteiner-gtrs3-1.jpg",
                "created_at": "2015-08-05 09:30:25",
                "updated_at": "2015-08-05 09:30:25"
            },
            {
                "id": 43,
                "content_type_id": 1,
                "content_id": 10,
                "key": "thumbnail",
                "value": "heIzr-1438767025-vorsteiner-gtrs3-2.jpg",
                "original": "vorsteiner-gtrs3-2.jpg",
                "created_at": "2015-08-05 09:30:25",
                "updated_at": "2015-08-05 09:30:25"
            },
            {
                "id": 45,
                "content_type_id": 1,
                "content_id": 10,
                "key": "thumbnail",
                "value": "3amBJ-1438767025-vorsteiner-gtrs3-3.jpg",
                "original": "vorsteiner-gtrs3-3.jpg",
                "created_at": "2015-08-05 09:30:26",
                "updated_at": "2015-08-05 09:30:26"
            }
        ]
    }
]

I would like to achieve this, where i just get the first thumbnail value instead of the whole collection

[
    {
        "id": 10,
        "user_id": 3,
        "title": "BMW M3 for sale",
        "make_id": 6,
        "model_id": 137,
        "cubic_capacity": 4000,
        "state_id": 4,
        "area_id": 121,
        "manufacture_year": 2015,
        "mileage": 100000,
        "transmission_id": 2,
        "car_type_id": 2,
        "body_type_id": 4,
        "description": "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod\r\ntempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,\r\nquis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo\r\nconsequat. Duis aute irure dolor in reprehenderit in voluptate velit esse\r\ncillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non\r\nproident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
        "listing_stage_id": 2,
        "listing_status_id": 1,
        "expired": 0,
        "premium": 0,
        "price": 400000,
        "created_at": "2015-08-05 09:30:23",
        "updated_at": "2015-08-05 09:30:23",
        "thumbnail": "HJdsJ-1438767025-vorsteiner-gtrs3-1.jpg"
    }
]

How can i achieve the above outcome

0 likes
1 reply
bimalshah72's avatar

@kennethjaysone

$cars = Car::with(['thumbnail' => function($query){
    $query->first();
}])->get();

$img = $cars->thumbnail[0]->value; 
// or in your case
 $img = $cars->thumbnail->value;

unset($cars['thumbnail']);
$cars->thumbnail = $img;

Please or to participate in this conversation.