gpt4 book ai didi

Laravel:belongsToMany() 没有获取多对多表中的字段

转载 作者:行者123 更新时间:2023-12-02 16:57:53 25 4
gpt4 key购买 nike

考虑下表:

user
id
name

client
id
name

user_client
user_id
client_id
rate
...

我希望我的 Controller 获取 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的模型。

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

虽然运行良好,但让我们看一下 View 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.*

编辑:当我这样做时,也欢迎任何改进建议。

最佳答案

如果您引用laravel docs on pivot tables ,您需要在关系中添加 withPivot

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

class User extends Eloquent 
{

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

更新您的 View ,例如:

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

我也渴望加载客户端以节省您的时间:

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

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

希望有帮助:)

关于Laravel:belongsToMany() 没有获取多对多表中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21141039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com