【问题标题】:Laravel eloquent relationships hasMany two foreign keys errorLaravel 雄辩的关系有很多两个外键错误
【发布时间】:2020-06-30 12:11:45
【问题描述】:

我使用 Laravel 7.2,我有 2 个模型:

用户

public function orders()
{
    if($this->hasRole("seller")) {
        return $this->hasMany('App\Models\Order', 'seller_id', 'id');
    } else if($this->hasRole("client")) {
        return $this->hasMany('App\Models\Order', 'user_id', 'id');
    }
}

订购

迁移:

Schema::create('orders', function (Blueprint $table) {
    $table->id();
    $table->boolean('status')->default(false);
    $table->text('description')->nullable();
    $table->unsignedBigInteger('user_id');
    $table->foreign('user_id')
        ->references('id')
        ->on('users')
        ->onDelete('cascade');
    $table->unsignedBigInteger('seller_id');
    $table->foreign('seller_id')
        ->references('id')
        ->on('users')
        ->onDelete('cascade');
    $table->timestamps();
    $table->softDeletes();
});

代码:

public function user()
{
    return $this->belongsTo('App\Models\User', 'user_id');
}

public function seller()
{
    return $this->belongsTo('App\Models\User', 'seller_id');
}

现在在我的例子中,用户有两个角色 sellerclient。但是当我尝试获取用户订单时,laravel 会返回错误消息:

在 null 时调用成员函数 addEagerConstraints()

或者当我尝试获取自定义订单用户或卖家相关数据时,也会返回相同的错误消息。

我有什么错误或我错误地创建了关系?

【问题讨论】:

  • 首先,您的迁移文件中有错误。 $table->id(); 应该是$table->bigIncrements('id');
  • 从您的评论来看,假设您使用的是旧版本的框架。 @MuktiRaniGhosh
  • 你是对的。我没有注意到您使用的是 Laravel 7.2。对不起

标签: laravel eloquent foreign-keys relationship laravel-7


【解决方案1】:

这是因为这里的关系中的条件:

public function orders()
{
    if($this->hasRole("seller")) {
        return $this->hasMany('App\Models\Order', 'seller_id', 'id');
    } else if($this->hasRole("client")) {
        return $this->hasMany('App\Models\Order', 'user_id', 'id');
    }
}

想象一下既没有“卖家”也没有“客户”角色的用户,那么 Null 将被返回,这正是问题所在。

我建议你将方法orders拆分成两个方法sellerOrdersclientOrders

【讨论】:

  • 我是拆分格式的一个选项,但我希望所有内容都在一个相关数据中。我在问题中有指定角色的用户,但事实证明它们在模型的自定义方法中不可用。我检查并得出结论,相关数据exp。 roles 在我的情况下仅在您使用 eloquent accessors 时可用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 2017-05-16
  • 2017-10-17
  • 1970-01-01
  • 2015-11-01
相关资源
最近更新 更多