Reputation: 2661
This is probably the strangest bug I've ever encountered in Laravel, and I have absolutely no idea what is going on.
Basically, I'm trying to get the value of a query. In this scenario, there are 3 images. Their titles are "1st image title", "2nd image title", and "3rd image title".
Here is the relevant code:
public function postFav($username, $URLtitle) {
$user = User::where('username', $username)->first();
$userID = User::where('username', $username)->value('id');
$image = Images::where('url_title', $URLtitle)->first();
Simple enough.
However, there's a problem.
If I diedump the title, like so:
dd($image->value('title'));
it always gives me the result "1st image title", the first image uploaded to the database.
So I try, rather than getting the value, I try just doing a normal diedump.
dd($image);
This is where things get weird.
That's right. dd($image) returns the correct image every time, but dd($image->value('title')) returns the first image's title.
What could possibly be causing this?
Upvotes: 3
Views: 4338
Reputation: 360
The eloquent method value()
is behaving exactly as documented. It
gets a single column's value from the first result of a query.
So, this explains the confusing behavior you pointed out.
From a performance perspective, using the model just to retrieve a single column value seem like an overstretch (expensive CPU cycles and memory) because the model has to be hydrated before you can extract a single value from it.
I would recommend the following:
DB::table('images')
->where('url_title', $URLtitle)
->value('title');
Upvotes: 0
Reputation: 1635
You can try without any value method. Try this way:
dd($image->title)
Upvotes: 2