gpt4 book ai didi

laravel - 如何在 Eloquent 上设置条件关系

转载 作者:行者123 更新时间:2023-12-04 05:28:56 25 4
gpt4 key购买 nike

我有这个(简化的)表结构:

users
- id
- type (institutions or agents)

institutions_profile
- id
- user_id
- name

agents_profile
- id
- user_id
- name

我需要创建一个 profile关于 Users的关系模型,但以下不起作用:
class User extends Model
{
public function profile()
{
if ($this->$type === 'agents')
return $this->hasOne('AgentProfile');
else
return $this->hasOne('InstitutionProfile');
}
}

我怎么能做到这样的事情?

最佳答案

让我们采用不同的方法来解决您的问题。首先让我们分别为各种模型设置关系。

class User extends Model
{
public function agentProfile()
{
return $this->hasOne(AgentProfile::class);
}

public function institutionProfile()
{
return $this->hasOne(InstitutionProfile::class);
}

public function schoolProfile()
{
return $this->hasOne(SchoolProfile::class);
}

public function academyProfile()
{
return $this->hasOne(AcademyProfile::class);
}

// create scope to select the profile that you want
// you can even pass the type as a second argument to the
// scope if you want
public function scopeProfile($query)
{
return $query
->when($this->type === 'agents',function($q){
return $q->with('agentProfile');
})
->when($this->type === 'school',function($q){
return $q->with('schoolProfile');
})
->when($this->type === 'academy',function($q){
return $q->with('academyProfile');
},function($q){
return $q->with('institutionProfile');
});
}
}

现在您可以像这样访问您的个人资料
User::profile()->first();

这应该为您提供正确的配置文件。希望能帮助到你。

关于laravel - 如何在 Eloquent 上设置条件关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43668153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com