2016-12-27 3 views
2

私はLaravelを使用しています。私は雄弁な表現を使用してコーチのIDを持つチームを作成することに問題があります。私はユーザー(コーチになることができる基本ユーザー)を持っている、そして私は1つまたは2つのコーチを持つことができる最後のチームと1つだけのチームを持つことができるコーチを持っています。彼らのテーブル:Laravelからリクエスト(コーチ)へのアクセス

Users: 
id | email | password | coach_id (null is default) 
Coaches: 
id | user_id | ... (other unnecessary coach info) 
Teams: 
id | coach_id | ... (other unnecessary team info) 
私はTeamControllerの方法でチームを作成しようとした

(YouTubeのhttps://youtu.be/z-1bdYTNWm8?t=6m50s上laravelチュートリアル以下):

$team = new Team(); 
$team->team_name = $team_name; 
$team->organization = $organization; 
$team->address = $address; 
$request->user()->coach()->team()->save($team); 

私のユーザモデル:

public function coach(){ 
    return $this->hasOne('App\Coach'); 
} 

マイコーチモデル:

public function user(){ 
    return $this->belongsTo('App\User'); 
} 

public function team(){ 
    return $this->hasOne('App\Team'); 
} 

マイチームモデル:

public function coach(){ 
    return $this->belongsToMany('App\Coach'); 
} 

しかし、私はこのエラーを取得:

BadMethodCallException in Builder.php line 2450: 
Call to undefined method Illuminate\Database\Query\Builder::team() 

答えて

1

あなたのようにそれを試すことができます。

$team = new Team(); 
$team->team_name = $team_name; 
$team->organization = $organization; 
$team->address = $address; 

$request->user()->coach->team()->save($team); 

注 - coach関係から()を削除します。

更新

あなたがカッコ()を追加すると、クエリビルダを作成し、あなたはUserモデルにteamという名前の任意の関係を持っていないので、Laravelはエラーをスローします。

しかし、$request->user()->coachを実行すると、Coachというモデルのオブジェクトが返され、次に関係名teamでクエリできます。

+0

さて、それは仕事をしました!しかし、なぜそれがそのように機能するのか教えてください。 – Matis

+1

更新された回答を確認してください。 –

+0

もし私がこれより良いアクセスをしているのであれば、 'User'モデルで' team'という名前の関係を作成した方が良いでしょうか?あるいはこれを行うもっと良い方法がありますか? – Matis

関連する問題