Laravel Eloquent:我的数据透视表有关系

Posted

技术标签:

【中文标题】Laravel Eloquent:我的数据透视表有关系【英文标题】:Laravel Eloquent: My Pivot table has relation 【发布时间】:2020-08-22 21:43:51 【问题描述】:

这里有一些关于表格的信息

User table
-id
-name

UserProduct table
-id
-user_id
-product_id

Product table
-id
-name

Contribution
-id
-user_product_id
-contribution

用户模型

public function products()

    return $this->belongsToMany('App\Product');

产品型号

public function users()

    return $this->belongsToMany('App\User');

UserProduct 透视模型

use Illuminate\Database\Eloquent\Relations\Pivot;

class UserProduct extends Pivot


    public function contribution()
    
        return $this->hasMany('App\Contribution');
    

我尝试auth()->user()->products()->first()->pivot->contribution(),但它给出了一些错误。

调用未定义的方法 Illuminate\Database\Eloquent\Relations\Pivot::contribution()

【问题讨论】:

【参考方案1】:

您可以使用custom pivot table model。

class UserProduct extends Pivot

  public function contribution()
  
    return $this->belongsTo('App\Contribution');
  

// User model

public function products()

    return $this->belongsToMany('App\Product')->using('App\UserProduct');

希望对你有帮助。

【讨论】:

如何调用contribution()? 类似问题:***.com/questions/25234650/…【参考方案2】:

受this 问题的启发。我们不能在枢轴对象上调用函数。

解决办法是:

首先,将 UserProduct 添加到 aliases,以便我们可以在 blade 中调用它。

配置\app.php:

'aliases' => [
   'UserProduct' => App\UserProduct::class, 
],

然后,使用 find 函数然后调用 relation 函数

刀片:

@foreach ($product->users as $user)
    @foreach (UserProduct::find($user->pivot->id)->contribution()->get() as $contribution)
         // viewing contribution attribute
    @endforeach
@endforeach

不要忘记包含数据透视 ID

产品型号:

public function users()

    return $this->belongsToMany('App\User')
                ->withPivot(['id']);

【讨论】:

以上是关于Laravel Eloquent:我的数据透视表有关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Eloquent - 查询数据透视表

如何对 Eloquent 关系中的数据透视表列进行 GROUP 和 SUM?

Eloquent Api 资源:显示数据透视表中的一列

如何在 laravel 5 中使用 Eloquent 更新数据透视表

Eloquent ORM / Laravel - 使用自定义数据透视表结构

Laravel Eloquent 根据数据透视表字段条件获取多对多关系