1

Currently making a study project, implementing a library in Laravel. I have written a procedure to calculate the amount of time a certain book was taken yearly:

$queryString = "SELECT ReadBookTakenPeriodPerYear({$id});";
$result = DB::select($queryString);

As a result, I am getting:

array (
  0 => 
  array (
    0 => 
    stdClass::__set_state(array(
       'ReadBookTakenPeriodPerYear(33)' => 1.91781,
    )),
  ),
) 

How can I get that 1.91781? Why can't I access the array by index, or convert the sdt-class to array? Researched for a solution on inet, on SO, still can't cope with it.

1

1 Answer 1

1
array (
  0 => 
  array (
    0 => 
    stdClass::__set_state(array(
       'ReadBookTakenPeriodPerYear(33)' => 1.91781,
    )),
  ),
) 

You have a few layers of unneeded nesting in this return data. You have a php standard object which is the first and only element in an array. That array is the first and only element in a parent array. As it stands, you should be able to get the value like this:

$result[0][0]->ReadBookTakenPeriodPerYear(33);

You can simplify the returned data to make this slightly more straightforward by adding a ->first().

$result = DB::select($queryString)->first();

Adding ->first() here should eliminate one level of array. You are telling query builder to give you the first matching result rather than a collection of all of them. Now you should be able to do:

$result[0]->ReadBookTakenPeriodPerYear(33);

Combine this with use of the laravel helper Arr::get() to avoid an exception if no data is found in the database. https://laravel.com/docs/master/helpers#method-array-get

  Arr::get($result, 0)->ReadBookTakenPeriodPerYear(33);

And,finally, the Laravel helper method optional() to make sure $results[0] returned an object before looking for the attribute on it to avoid an exception at that level. https://laravel.com/docs/master/helpers#method-optional

  optional(Arr::get($result, 0))->ReadBookTakenPeriodPerYear(33);

That should get you the data, and also be able to handle cases where data wasn't found in the database without crashing.

I hope it helps!

Sign up to request clarification or add additional context in comments.

1 Comment

Thank you very much, James, Yes, it does, approved answer.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.