2014-01-15 10 views
5

は以下の表を考えてみません:Laravel:belongsToMany()は多対多のテーブルのフィールド

user 
    id 
    name 

client 
    id 
    name 

user_client 
    user_id 
    client_id 
    rate 
    ... 

私は私のコントローラはuserテーブル内のすべてのフィールドを取得したいと私はまた、一覧表示にしたいです彼らのクライアントはnamerateです。ユーザーとクライアントのモデル:

class User extends Eloquent { 

    public function clients() 
    { 
     return $this->belongsToMany('Client', 'user_client'); 
    } 

} 

class Client extends Eloquent { 

    public function users() 
    { 
     return $this->belongsToMany('User', 'user_client'); 
    } 

} 

user_clientのモデルはありません。それが正常に動作しながら

[email protected]

public function show($username) // foo.com/user/{$username} 
{ 
    $user = User::where('username', '=', $username)->firstOrFail(); 
    $clients = User::find($user->id)->clients; 

    return View::make('users.show', compact('user', 'clients')); 
} 

の抽出物、のビューusers/show.blade.phpを見てみましょう:

<h1>{{$user->name}}</h1> 
@foreach($clients as $client) 
    <p>{{$client->name}}, {{$client->rate}}</p> 
@endforeach 

$client->rateは未定義です。クエリデバッガのチェックでは、belongsToManyはclient.*のみを選択しますが、user_idclient_id以外は選択しません。

User::find($user->id)->clients;を変更してuser_client.*を選択するにはどうすればよいですか?

編集:私はそれに着手していますが、改善のための提案も歓迎します。

答えて

10

laravel docs on pivot tablesを参照する場合は、あなたの関係にwithPivotを追加する必要があります。あなたの例では

あなたは以下を追加する必要があります。

class User extends Eloquent 
{ 

    public function clients() 
    { 
     return $this->belongsToMany('Client', 'user_client')->withPivot('rate'); 
    } 
} 

アップデートのようなあなたのビュー:

public function show($username) // foo.com/user/{$username} 
{ 
    $user = User::with('clients')->where('username', '=', $username)->firstOrFail(); 

    return View::make('users.show', compact('user')); 
} 

<h1>{{$user->name}}</h1> 
@foreach($user->clients as $client) 
    <p>{{$client->name}}, {{$client->pivot->rate}}</p> 
@endforeach 

私はまた、熱心な負荷はクライアントがあなたの時間を節約するでしょう

希望するもの:

+0

うわー、特に熱心なロードです。どうすればよいのですか?私は 'public function newPivot(Model $ parent、array $ attributes、$ table、$ exists)をどのように使っていますか? ; \t} 'この場合は?私はEloquentを拡張するための 'BaseModel'を追加しましたが、私はこの概念を理解するのに問題があります。 – tiffanyhwang

+0

フォーラムやIRCでこれを利用することをお勧めしますか?あなたが達成したいことは本当にわかりませんか? :) – Cristian

+0

' - >ピボット - >'のチップをありがとう。 – Pathros

関連する問題