首页 > 解决方案 > Laravel 雄辩的关系有很多两个外键错误

问题描述

我使用 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()

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

我在哪里有任何错误或我错误地创建了关系?

标签: laraveleloquentforeign-keysrelationshiplaravel-7

解决方案


发生这种情况是因为这里的关系中的条件:

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.


推荐阅读