f0rtis
f0rtis

Reputation: 326

Laravel get nested relation value

Is exist a possibility to easy get relation value in Laravel 5? Here an example of what i need:

I have model Book and i have author relation to model Author. Author also have relation country to model Country. I need to show on book page country name of Author. I can easy wrote:

echo $model->author->country->name

But what if a author of book not provided or we don't know author coutry? I will got a notice.

So I need to add additional checkings:

if ($model->author && $model->author->country) echo $model->author->country->name

Maybe exists some method in laravel, which simplify getting a value? Maybe something like SomeHelperClass::getValue($model, 'author.country.name'), so if some part of the chain is null, then method also returns null. Thanks.

Upvotes: 0

Views: 2053

Answers (1)

f0rtis
f0rtis

Reputation: 326

Sorry for answering my own question. Anyway:

Laravel 5.1 has helper function array_get, which works similar to what i want. But problem is that function works only with arrays. So i need to eager load all required data and convert object to an array:

$model = Book::with('author.country')->findOrFail($id);
$country_name = array_get($model->toArray(), 'author.country.name');
// or
$country_name = object_get($model, 'author.country.name');

Upvotes: 1

Related Questions