I am trying to do a search and return a single value. I am getting different results depending on how I try to get the value.
If the table has the following values:
id | name |
---|---|
1 | Professional I |
2 | Professional II |
3 | Professional III |
4 | Professional IV |
5 | Teacher I |
6 | Teacher II |
And I set $type = 4
, I expect to get Professional IV
.
CertificateRequest::find($type)->name;
Returns Professional VI
which is what I want.
However,
CertificateRequest::find($type)->value("name"));
and
CertificateRequest::find($type)->first()->value("name");
Both return Professional I
What am I doing wrong? The problem with the first approach is if $type = null
, I get Attempt to read property "name" on null
. It also becomes harder to dynamically pass a column name.
CodePudding user response:
Use
CertificateRequest::findOrFail($type)->name;
Will return data or 404, not null.
CodePudding user response:
You can try
$data = CertificateRequest::where('id',$type)->get();
CodePudding user response:
This code should do what you want:
CertificateRequest::where('id', $type)->value("name"));
The difference is that find
executes the query, which means that value
seems to execute a second query without the type parameter. The where
method modifies the query without executing it, allowing the value
method to execute the query and return a result.