首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以返回集合,然后在Laravel中使用BelongsTo模型关系吗

我可以返回集合,然后在Laravel中使用BelongsTo模型关系吗
EN

Stack Overflow用户
提问于 2020-09-23 08:41:24
回答 2查看 25关注 0票数 0

我有一个赞助商表,它将包含以下列:

代码语言:javascript
运行
复制
id
name
country

我有一个clinical_trials表,它将包含以下列:

代码语言:javascript
运行
复制
id
name
status
country

我有一个sponsor_to_clinical_trials表,如下所示:

代码语言:javascript
运行
复制
sponsor_id (fk to sponsors table)
clinical_trial_id (fk to clinical_trials table)

赞助商将能够有许多临床试验,例如,给定的sponsor_id将在sponsor_to_clinical_trials表中多次出现。

我的问题可能很基本,但我只使用了模型关系,即我返回一个项,然后使用该关系。

我不确定这样的事情是否会奏效:

SponsorToClinicalTrial::where(sponsor_id,auth::guard(‘发起人’)) -->临床试验-->合同-->get()

SponsorToClinicalTrial::where(sponsor_id,auth::guard(‘赞助商’))将返回一个集合,并且将在名为clinicalTrials的SponsorToClinicalTrial模型上存在一个'belongsTo‘关系,该关系将用于临床试验。

我知道如果SponsorToClinicalTrial::where(sponsor_id,auth::guard(‘赞助商’))只返回一行,这将会起作用,但如果它返回多行,我不知道是否可以使用它

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-23 09:46:04

您的表结构表明,通过sponsor_to_clinical_trialssponsorsclinical_trials之间存在多对多关系。一个基本的belongsToMany关系可能就是你想要的。

Sponsor模型与ClinicalTrial模型具有belongsToMany关系。而且,ClinicalTrial模型将有一个带有Sponsor模型的belongsToMany

代码语言:javascript
运行
复制
class Sponsor extends Model{
  public function clinicalTrials(){
    return $this->belongsToMany(ClinicalTrial::class, 'sponsor_to_clinical_trials');
  }
}

class ClinicalTrial extends Model{
  public function sponsors(){
    return $this->belongsToMany(Sponsor::class, 'sponsor_to_clinical_trials');
  }
}

现在,您可以获得相关临床试验的所有赞助商,或获得相关临床试验的单个赞助商。临床试验也是如此。

代码语言:javascript
运行
复制
//use App\ClinicalTrial; use App\Sponsor;
$sponsorsWithClinicalTrials = Sponsor::with('clinicalTrials')->get(); //list (collection) of sponsors with related clinical trials

$clinicalTrialsWithSponsors = ClinicalTrial::with('sponsors')->get(); //list of clinical trials with related sponsors

$singleSponsorWithClinicalTrials = Sponsor::where(id, auth::guard('sponsor'))->with('clinicalTrials')->get(); //your example, assuming auth::guard('sponsor') holds a sponsor id. 
//$singleSponsorWithClinicalTrials->clinicalTrials would give you the collection of clinical Trials belonging to that sponsor

有关Laravel的多对多实现的更多信息:https://laravel.com/docs/8.x/eloquent-relationships#many-to-many

票数 0
EN

Stack Overflow用户

回答已采纳

发布于 2020-09-23 09:46:04

如何在赞助商和试验之间建立BelongsToMany关系:

代码语言:javascript
运行
复制
class Sponsor extends Model
{
    public function clinicals()
    {
        return $this->belongsToMany(ClinicalTrial::class, 'sponsor_to_clinical_trials');
    }
}

然后,您可以使用flatMaphigher order messages以这种方式访问contracts

代码语言:javascript
运行
复制
$sponsor->clinicalTrials->flatMap->contracts;
//or
$sponsors->flatMap->clinicalTrials->flatMap->contracts;
//This is similar to the second example but more performant.
$sponsors->load('clinicalTrials.contracts')->flatMap->clinicalTrials->flatMap->contracts;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64019447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档