2017-06-19 52 views
0

さて、これは私の方法である:Laravel - スーパーロング関係(それが正しい感じていない)

public function edit(Request $request, $ent, $room, $obj) 
{ 
    $input = $request->except(['_token']); 

    Enterprise::where('bedrijfsnaam', $ent)->first()->rooms()->where('name', $room)->first()->objects()->where('name', $obj)->first()->update($input); 

    return redirect('/enterprise/'.$ent.'/room/'.$room); 
} 

あなたが見ることができるように、Enterprise::where()で私は本当に長い関係を持っている、しかし、それは感じていませんそのような長い関係を持つ権利。これを大きなものにするのは大丈夫ですか、それとももっと良い方法がありますか?

+0

使用スコープ。 https://laravel.com/docs/5.4/eloquent#local-scopes –

答えて

1

明らかに、関係/モデルが何であるかを実際に知ることなくデータベーススキーマを簡略化できるかどうかは言うまでもありません。しかし、いくつかのケースでは、このような複雑な関係は完全に大丈夫です。このケースでは、コントローラで構築しているクエリを抽象化するために、モデルにいくつかの記述方法を定義します。

代わりのEnterprise::where('bedrijfsnaam', $ent)->first()->rooms()->where('name', $room)->first()->objects()->where('name', $obj)->first()->update($input);、多分あなたが何かのようにそれを簡素化することができます:あなたのモデルに

Enterprise::where('bedrijfsnaam', $ent)->first()->getRoomByName($name)->getObjectByName($obj)->update($input);

+0

Hmmmmmm .... ええ、大丈夫です。それをします。ありがとう –

関連する問題