【问题标题】:Laravel 5.8: Undefined property: Illuminate\Database\Eloquent\Relations\BelongsToMany::$usr_idLaravel 5.8:未定义属性:Illuminate\Database\Eloquent\Relations\BelongsToMany::$usr_id
【发布时间】:2021-09-23 03:47:55
【问题描述】:

我在用户模型和钱包模型之间有多对多关系:

Wallet.php

public function users() {
    return $this->belongsToMany(User::class,'user_wallet','user_id','wallet_id');
}

User.php

public function wallets() {
    return $this->belongsToMany(Wallet::class,'user_wallet','user_id','wallet_id')->withPivot('balance');;
}

然后在 Blade,我尝试了这个:

@forelse($user->wallets as $wallet)
    <tr>
        <td>{{ $wallet->name }}</td>
        <td>{{ $wallet->pivot->balance }}</td>
        <td><a href="{{ route('user.WalletTransaction', ['walletId'=>$wallet->id,'userId'=>$wallet->users()->id]) }}" class="fa fa-exchange text-dark mt-1"></a></td>
    </tr>
    @empty
        <td colspan="5" class="text-center">No wallet exist</td>
    @endforelse

如您所见,我传递了两个参数作为路由名称user.WalletTransaction,这是一个链接:

{{ route('user.WalletTransaction', ['walletId'=>$wallet->id,'userId'=>$wallet->users()->usr_id]) }}

web.php 上:

Route::get('wallet/transaction/{wallet}/{user}', 'Wallet\UserWalletController@WalletTransaction')->name('user.WalletTransaction');

但它显示了这个错误:

未定义属性:Illuminate\Database\Eloquent\Relations\BelongsToMany::$usr_id

但是usr_idusers 表中用户的ID:

数据透视表结构user_wallet 如下所示:

那么我怎样才能正确地将用户 ID 添加到该链接?

我非常感谢你们对此提出的任何想法或建议......

谢谢。

更新 #1

&lt;a href="{{ route('user.WalletTransaction', ['walletId'=&gt;$wallet-&gt;id,'userId'=&gt;$user-&gt;id]) }}" class="fa fa-exchange text-dark mt-1" /&gt; 的结果显示两个链接!

【问题讨论】:

  • 好吧,你的钱包“属于许多”用户,所以你想用wallet-&gt;users()-&gt;usr_id访问哪个用户,wallet-&gt;users()有很多用户,这就是我猜它不起作用的原因。

标签: php laravel laravel-5.8


【解决方案1】:

$wallet-&gt;users() 返回一个集合,因此您需要像迭代 wallets 一样迭代它

@forelse($wallet->users() as $user)
  <td>
    <a href="{{ route('user.WalletTransaction', ['walletId'=>$wallet->id,'userId'=>$user->id]) }}" class="fa fa-exchange text-dark mt-1" />
  </td>
[...]

【讨论】:

  • 因为$wallet-&gt;users() 返回Illuminate\Database\Eloquent\Relations\BelongsToMany 的一个实例。要获得可迭代的集合,您不应该调用 get 吗?所以:$wallet-&gt;users()-&gt;get() 或只是$wallet-&gt;users 来收集?否决了您的解决方案,因为它不起作用。如果你改变它,会投票。
  • 谢谢,但它显示了两个链接而不是一个,我刚刚添加了一个关于此的 UPDATE #1
  • @loctoj 如果显示链接,则表示您有两个用户与该钱包相关联。
  • @loctoj 我已经帮不了你了。从逻辑的角度来看,我提供了一个可行的解决方案;不能说你现在有什么问题,但我 100% 确定我的解决方案可以解决你所描述的问题。
猜你喜欢
  • 2020-05-04
  • 2018-11-22
  • 2018-11-19
  • 1970-01-01
  • 2020-07-08
  • 2019-08-12
  • 2020-11-23
  • 1970-01-01
  • 2020-01-26
相关资源
最近更新 更多