laravel - 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');
}
现在在我的情况下,用户有两个角色Seller或client。但是当我尝试获取用户订单时,laravel 会返回错误消息:
在 null 上调用成员函数 addEagerConstraints()
或者当我尝试获取自定义订单用户或卖家相关数据时,也会返回相同的错误消息。
我在哪里有任何错误或我错误地创建了关系?
解决方案
发生这种情况是因为这里的关系中的条件:
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
为两种方法sellerOrders
和clientOrders
.
推荐阅读
- java - JavaFX - 通过按钮编辑树视图节点文本
- mysql - 为什么我从这个 SQL 查询中得到错误的结果?
- java - 计算模型照明的法线导致模型不再渲染
- apache-spark - 2个火花应用程序不能使用相同的组ID从相同的Kafka主题并行消费
- xslt - 将 XSLT 中的字母数字与破折号组合
- xamarin - 如何通过默认系统 pdf 应用程序中的 FileProvider 在 Xamarin.Android 中打开内部创建的 pdf?
- c - 使用带有 openssl 的 libc 时修复动态链接器错误
- excel - ActiveSheet.PasteSpecial Paste:=xlPasteValues 不起作用
- python-3.x - python中的求和列表
- c# - 如何使用 C# 在列有日期的情况下将多行插入 MySql?