Laravel 8 - 在 null 时调用成员函数 addEagerConstraints()
Laravel 8 - Call to a member function addEagerConstraints() on null
我有一个可以是客户端或提供者的用户模型。
我需要的是根据用户类型加载不同的关系
如果用户是客户,我必须加载他们与我的客户模型的关系,并且在作为提供者的情况下完全相同
为此,我首先获取具有人员关系的个人数据(按预期工作),然后尝试加载条件关系,如下所示
$users = User::with('person')->get();
$users->load('entity');
但是在我的浏览器中,我收到这个错误
Error Call to a member function addEagerConstraints() on null
这是我关系的作用
public function entity() {
switch($this->type) {
case 'Client':
return $this->hasOne(Client::class,'id','client_id');
break;
case 'Provider':
return $this->hasOne(Provider::class,'id','provider_id');
break;
}
}
那是因为您的某些用户不属于 Client
或 Provider
类型,因此由于您定义 entity()
关系的方式,某些用户可能不存在其中
避免关系中的任何条件并考虑在这种情况下使用多态关系,因为您的 User
模型可能与 1 个以上的模型相关 class。
您可以通过在 users
table 中使用 entitable_id
和 indentitable_type
并定义您的关系来简化模型和数据库,例如:
Entity.php model
public function entitable()
{
return $this->morphTo();
}
----------------------------
Users.php model
public function entity()
{
return $this->morphOne(Entity::class, 'entitable');
}
编辑:
如果你想保持这种方式,你可以尝试映射 $users
$users = $users->map(function($user){
return $user->type == 'Client' || $user->type == 'Provider' ? $user->load('entity') : $user;
});
我有一个可以是客户端或提供者的用户模型。 我需要的是根据用户类型加载不同的关系
如果用户是客户,我必须加载他们与我的客户模型的关系,并且在作为提供者的情况下完全相同
为此,我首先获取具有人员关系的个人数据(按预期工作),然后尝试加载条件关系,如下所示
$users = User::with('person')->get();
$users->load('entity');
但是在我的浏览器中,我收到这个错误
Error Call to a member function addEagerConstraints() on null
这是我关系的作用
public function entity() {
switch($this->type) {
case 'Client':
return $this->hasOne(Client::class,'id','client_id');
break;
case 'Provider':
return $this->hasOne(Provider::class,'id','provider_id');
break;
}
}
那是因为您的某些用户不属于 Client
或 Provider
类型,因此由于您定义 entity()
关系的方式,某些用户可能不存在其中
避免关系中的任何条件并考虑在这种情况下使用多态关系,因为您的 User
模型可能与 1 个以上的模型相关 class。
您可以通过在 users
table 中使用 entitable_id
和 indentitable_type
并定义您的关系来简化模型和数据库,例如:
Entity.php model
public function entitable()
{
return $this->morphTo();
}
----------------------------
Users.php model
public function entity()
{
return $this->morphOne(Entity::class, 'entitable');
}
编辑: 如果你想保持这种方式,你可以尝试映射 $users
$users = $users->map(function($user){
return $user->type == 'Client' || $user->type == 'Provider' ? $user->load('entity') : $user;
});