2016-04-23 120 views
0

在Laravel 5中存在一個可能容易得到關係值的可能嗎? 這裏是我需要的一個例子:Laravel得到嵌套關係值

我有模型Book和我有author關係到型號AuthorAuthor也與型號Country有關係country。我需要在作者的書頁國家名稱上顯示。我可以容易地寫道:

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

但是,如果書的作者未提供或我們不知道作者coutry?我會收到通知。

所以我需要添加額外的checkings:

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

也許存在於laravel一些方法,它簡化了獲得一個價值? 也許類似於SomeHelperClass::getValue($model, 'author.country.name'),所以如果鏈條的某個部分是null,那麼方法也會返回null。謝謝。

+0

爲什麼不添加一個方法$ Book-> countryName不返回空或空字符串。換句話說:用這種方法包裝檢索國名的邏輯 –

+0

@DavidLavieri,因爲我有很多類似的情況,並且將每個檢查包裝到單獨的方法中並不是明智的選擇。 – f0rtis

+0

SomeHelperClass :: getValue($ model,'author.country.name')將會是封裝和檢查或實際查詢數據庫後面的封面,可能更雜亂,因爲laravel抽象是如此...摘要 –

回答

0

對不起,回答我自己的問題。無論如何:

Laravel 5.1具有幫手功能array_get,其工作原理類似於我想要的。但問題是,該功能只適用於數組。所以我需要加載所有需要的數據,並將對象轉換爲數組:

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