【问题标题】:Laravel/Eloquent get all appointments from a polymorphic "member_id" through a appointment_members tableLaravel/Eloquent 通过一个约会成员表从一个多态的“member_id”获取所有约会
【发布时间】:2019-01-29 18:29:03
【问题描述】:

我有一个appointments 表和一个appointment_members 表,我的用户需要能够通过搜索"member_id"(可能是PersonIncident)来获得appointments 的集合或CustomerIDappointment_members 表有 member_idappointment_id 列,因此 member_type(也是一列)是无关紧要的。这一切都是由以前的开发人员设置的,缺少的是 Eloquent 模型上的关系。我只是创建一个简单的 GET 路由,该路由需要返回该 member_id 的任何/所有约会。每一行都有一个约会,所以如果我要传递一个返回 10 个结果的member_id,有些可能有 appts 而有些则没有,但归根结底,我只需要一组与该 @ 相关的 appts 987654335@。这是appointment_members 表的屏幕截图:

如果我创建一个简单的hasOne 关系到约会成员上的约会:

public function appointments()
{
    return $this->HasOne(Appointment::class, 'id', 'appointment_id');
}

我可以得到appointment_members 的集合以及它各自的appointment,但不知道我如何将其归结为只是得到appointments。我的一种解决方法是使用该 HasOne,然后提取/过滤约会:

$appointmentMembers = AppointmentMembers::where('member_id', $request->input('memberId'))->get();
$appointments = $appointmentMembers->pluck('appointments')->filter();

想知道是否有人能找到更好的方法来解决这个问题。谢谢!

【问题讨论】:

    标签: laravel laravel-5 eloquent polymorphism laravel-5.4


    【解决方案1】:

    我可能不明白,但如果成员类型不重要,我可能会在这里采取最简单的方法。

    该表已经设置为处理 belongsToMany 或 morphMany,因此请在 Member 类上创建关系(或者如果您没有父成员类,请将其粘贴到 Person、Incident、等等。当然,你也可以通过 poly 来实现,但这是一个简单的例子,可以满足你的需要):

    public function appointments()
    {
        return $this->belongsToMany(Appointment::class)->withPivot('member_type');
    } 
    

    然后只需查询您需要约会的成员对象(拥有 poly 就可以完成这一步):

    $allAppointmentsForID = $member->appointments();
    $appointments = $allAppointmentsForID->wherePivot('member_type', $whateverClassThisIS);
    

    以上考虑了 member_type。如果这无关紧要,您可以使用顶行。

    您的原始数据库设置为处理多态关系,因此如果您想要的不仅仅是约会,您也可以这样设置。现在,您需要将 TYPE 添加到查询中以涵盖不同的类。

    如果成员类型很重要,那么成员类上的多态可能是这样的:

    public function appointments()
    {
        return $this->morphMany(Appointment::class, 'memberableOrmember_typeOrWhatever');
    }
    

    那么你就可以只用一行查询成员对象了

    $appointments = $member->appointments();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-15
      • 2020-03-25
      • 1970-01-01
      • 2019-11-25
      • 2018-12-29
      相关资源
      最近更新 更多