未定义 属性:Illuminate\Database\Eloquent\Relations\BelongsToMany::$余额
Undefined property: Illuminate\Database\Eloquent\Relations\BelongsToMany::$balance
我在 Wallet
和 User
模型之间存在多对多关系:
User.php:
public function wallets()
{
return $this->belongsToMany(Wallet::class,'user_wallet','user_id','wallet_id')->withPivot('balance');
}
Wallet.php:
public function users()
{
return $this->belongsToMany(User::class,'user_wallet','wallet_id','user_id')->withPivot('balance');
}
枢轴 table user_wallet
是这样的:
现在我需要在 Blade 的 table 中获取钱包的名称和该钱包的余额。
所以在控制器上,我添加了这个:
public function index($id)
{
// $id is the user id
$userWallet = Wallet::with("users")->whereHas('users',function ($query)use($id){
$query->where('user_id',$id);
})->get();
}
然后在 Blade:
@forelse($userWallet as $wallet)
<div class="message_fullName">
{{ $wallet->name }}
</div>
<div class="message_tag">
{{ $wallet->users()->balance }}
</div>
@empty
Empty
@endforelse
但是我得到这个错误:
Undefined property: Illuminate\Database\Eloquent\Relations\BelongsToMany::$balance
那么这里出了什么问题?我怎样才能在枢轴 table 处正确获得 balance
?
那是因为您将关系的查询生成器对象与 users()
一起使用,但您需要 user
属性 来获取集合:
@forelse($userWallet as $wallet)
<div class="message_fullName">
{{ $wallet->name }}
</div>
<div class="message_tag">
{{ $wallet->users->balance }}
</div>
@empty
Empty
@endforelse
但即使是集合实例也没有余额 属性 只要它不是自定义集合。您可能需要遍历集合或使用 pluck
来获取模型的 balance
属性:
@forelse($userWallet as $wallet)
<div class="message_fullName">
{{ $wallet->name }}
</div>
<div class="message_tag">
{{ $wallet->users->pluck('balance')->join(', ') }}
</div>
@empty
Empty
@endforelse
你必须循环用户
@forelse($userWallet as $wallet)
<div class="message_fullName">
{{ $wallet->name }}
</div>
<div class="message_tag">
@if(isset($wallet->users)&&count((array)$wallet->users))
@foreach($wallet->users as $user)
{{$user->pivot->balance }}
@endforeach
@endif
</div>
@empty
Empty
@endforelse
您的查询应该是
$userWallet = Wallet::with(["users"=>function ($query)use($id){
$query->where('user_id',$id);
}])->whereHas('users',function ($query)use($id){
$query->where('user_id',$id);
})->get();
我在 Wallet
和 User
模型之间存在多对多关系:
User.php:
public function wallets()
{
return $this->belongsToMany(Wallet::class,'user_wallet','user_id','wallet_id')->withPivot('balance');
}
Wallet.php:
public function users()
{
return $this->belongsToMany(User::class,'user_wallet','wallet_id','user_id')->withPivot('balance');
}
枢轴 table user_wallet
是这样的:
现在我需要在 Blade 的 table 中获取钱包的名称和该钱包的余额。
所以在控制器上,我添加了这个:
public function index($id)
{
// $id is the user id
$userWallet = Wallet::with("users")->whereHas('users',function ($query)use($id){
$query->where('user_id',$id);
})->get();
}
然后在 Blade:
@forelse($userWallet as $wallet)
<div class="message_fullName">
{{ $wallet->name }}
</div>
<div class="message_tag">
{{ $wallet->users()->balance }}
</div>
@empty
Empty
@endforelse
但是我得到这个错误:
Undefined property: Illuminate\Database\Eloquent\Relations\BelongsToMany::$balance
那么这里出了什么问题?我怎样才能在枢轴 table 处正确获得 balance
?
那是因为您将关系的查询生成器对象与 users()
一起使用,但您需要 user
属性 来获取集合:
@forelse($userWallet as $wallet)
<div class="message_fullName">
{{ $wallet->name }}
</div>
<div class="message_tag">
{{ $wallet->users->balance }}
</div>
@empty
Empty
@endforelse
但即使是集合实例也没有余额 属性 只要它不是自定义集合。您可能需要遍历集合或使用 pluck
来获取模型的 balance
属性:
@forelse($userWallet as $wallet)
<div class="message_fullName">
{{ $wallet->name }}
</div>
<div class="message_tag">
{{ $wallet->users->pluck('balance')->join(', ') }}
</div>
@empty
Empty
@endforelse
你必须循环用户
@forelse($userWallet as $wallet)
<div class="message_fullName">
{{ $wallet->name }}
</div>
<div class="message_tag">
@if(isset($wallet->users)&&count((array)$wallet->users))
@foreach($wallet->users as $user)
{{$user->pivot->balance }}
@endforeach
@endif
</div>
@empty
Empty
@endforelse
您的查询应该是
$userWallet = Wallet::with(["users"=>function ($query)use($id){
$query->where('user_id',$id);
}])->whereHas('users',function ($query)use($id){
$query->where('user_id',$id);
})->get();