Laravel:belongsToMany()不会在多对多表中获取字段

tif*_*ang 6 many-to-many laravel

请考虑以下表格:

user
  id
  name

client
  id
  name

user_client
  user_id
  client_id
  rate
  ...
Run Code Online (Sandbox Code Playgroud)

我希望我的控制器能够获取user表中的所有字段,并且我还希望列出他们的客户端name以及rate之后.用户和客户端型号:

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');
    }

}
Run Code Online (Sandbox Code Playgroud)

没有模型user_client.

我的摘录 UsersController@show

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'));
}
Run Code Online (Sandbox Code Playgroud)

虽然运行良好,但让我们看一下视图users/show.blade.php:

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

$client->rate未定义.检查我的查询调试器,belongsToMany只会选择,client.*但它不会选择除user_id和之外的任何内容client_id.

如何修改User::find($user->id)->clients;以便它也会选择user_client.*

编辑:虽然我在这里,但也欢迎任何改进建议.

Cri*_*ian 11

如果您参考透视表上laravel文档,则需要添加withPivot关系.

在您的示例中,您需要添加以下内容:

class User extends Eloquent 
{

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

更新你的观点,如:

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

我也急于加载客户端以节省您的时间:

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

    return View::make('users.show', compact('user'));
}
Run Code Online (Sandbox Code Playgroud)

希望有帮助:)