首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Laravel雄辩中建立多层次关系查询

如何在Laravel雄辩中建立多层次关系查询
EN

Stack Overflow用户
提问于 2021-11-17 19:43:25
回答 2查看 505关注 0票数 2

我有三个模特。SponsorOptinParticipantSponsorOptin有一对多的关系,Optin有一对一的Participant.

这使得模型看起来像这样:

赞助模式

代码语言:javascript
运行
复制
class Sponsor extends Model
{ 
    public function optins()
    {
        return $this->hasMany(Optin::class);
    }
}

Optin模型

代码语言:javascript
运行
复制
class Optin extends Model
{    

    public function sponsor()
    {
        return $this->belongsTo(Sponsor::class);
    }
    public function participant()
    {
        return $this->belongsTo(Participant::class);
    }
}

参与者模型

代码语言:javascript
运行
复制
class Participant extends Model
{
    public function optins()
    {
        return $this->hasMany(Optin::class);
    }

    public function scopeCreatedToday($query)
    {
        return $query->whereDate('created_at', Carbon::today());
    } 
}

现在,在一项每天预定的任务中,我想遍历今天创建的所有参与者,这些参与者选择了某个赞助商,像电子邮件或其他东西一样发送给他们。现在,我已经回到了属于参与者的身份。但是下一步是获取参与者对象,并通过正确的创建日期对它们进行筛选。但我有点不知所措。

代码语言:javascript
运行
复制
$sponsor = Sponsor::find(1);
$count = $sponsor->optins()->count();
echo("Count: " . $count . "\n");
$optins = $sponsor->optins()->get();
foreach($optins as $optin)
{
    echo($optin->participant_id . "\n");
}

编辑:,在重新考虑了结构之后,我发现OptinParticipant有着多对一的关系。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-18 02:38:11

由于ParticipantOptin有一对多的关系,所以我在Sponsor模型上添加了以下关系。通过传递Optin模型als,将第二个参数传递给belongsToMany方法,因为它作为中间表运行。

代码语言:javascript
运行
复制
public function participants()
{
    return $this->belongsToMany(Participant::class, Optin::class);
}

通过添加属于赞助商的子查询,我可以轻松地获得所有参与者,如下所示:

代码语言:javascript
运行
复制
$sponsor = Sponsor::find(1); 
$participants = $sponsor->participants()->createdToday()->get();
foreach($participants as $participant)
{
    //do something with $participant
}
票数 0
EN

Stack Overflow用户

发布于 2022-05-22 18:12:59

如果您希望从同一个表中获得多个级别的数据,此解决方案将帮助您处理laravel.and中的多个关系,name.your名称与(‘point’)是函数的不同。

代码语言:javascript
运行
复制
class Master extends Model
{
    public function point() {
        return $this->hasMany(Master::class,'point_id')->with('point');
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70010594

复制
相关文章

相似问题

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