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)
希望有帮助:)
| 归档时间: |
|
| 查看次数: |
12399 次 |
| 最近记录: |