2017-03-19 20 views
0
私はLaravelのモデルを使用してDBへの私の要求に

と機能withのような:演算子を使用してLaravelコードを改善するにはどうすればよいですか?

$user = User::with("city")->get(); 

問題は、テンプレートで次の操作を実行するかのことです。

{{$user->city()->name}} 

ユーザーが都市を指定した場合にのみ、その後動作します、データベーステーブルに値が存在します。それ以外の場合はエラーを返します:

余計なチェックを取り除くためにどのように:

@if(isset($user->city()->name)) 
    {{$user->city()->name}} 
@endif 

これはひどくです!お使いのモデルの関係を定義するとき

+1

ところで、メソッドを介さずに、プロパティを介して関連モデルにアクセスできます。したがって、 '$ user-> city() - > name'ではなく' $ user-> city-> name'を使用してください。 –

答えて

5

withDefaultメソッドを使用します。場所にこれにより

class User extends Model 
{ 
    public function city() 
    { 
     return $this->hasOne(City::class)->withDefault(); 
    } 
} 

を、$user->cityは常にCityモデルを返します。

+0

これは 'return $ this-> belongsToMany();'と共同して動作しません。 – Darama

+0

私はLaravelを使用しています。5.4 – Darama

+0

@Darama - 'belongsToMany'は常にコレクションを返します。元の例では、あなたがコレクションを使用していることを示していませんでした。コレクションを使用するので、常にコレクションを返します(関連するモデルがない場合は空です)。だから、何もチェックする必要はありません。 –

関連する問題