2016-04-23 15 views
0

Laravel 5のリレーション値を簡単に取得する可能性はありますか? ここに私が必要とする例があります:Laravelネストされたリレーション値を取得

私はモデルBookを持っています。との関係はauthorです。 Authorも、モデル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を()を追加していけないのはなぜならば、国の名前を返す存在する場合、それは作者をチェックしましたnullまたは空の文字列を返しません。言い換えれば:そのメソッドで国名を取得するロジックをラップします。 –

+0

@DavidLavieri似たような状況がたくさんあり、それぞれのチェックを別々の方法でラップするのは賢明ではないためです。 – f0rtis

+0

SomeHelperClass :: getValue($ model、 'author.country.name')は、ラッパーと抽象概念がそうであるように、カバーの後ろにあるデータベースへのラッパーとチェックまたは実際の照会になるでしょう... abstracts –

答えて

0

私自身の質問にお答えして申し訳ありません。とにかく:

Laravel 5.1には助手の機能array_getがあり、これは私が欲しいものに似ています。しかし問題は、関数が配列でのみ機能することです。だから私は熱心な負荷に必要なすべてのデータを必要とし、オブジェクトを配列に変換します。

$model = Book::with('author.country')->findOrFail($id); 
$country_name = array_get($model->toArray(), 'author.country.name'); 
関連する問題