为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 多对多和一对多表模型和控制器

Laravel 多对多和一对多表模型和控制器

PHP
墨色风雨 2021-06-18 17:32:09
能有人帮我拿到这个数字开始out.To这是不是重复的CRUD在Laravel三个表/模型之间的关系和。有 2 个表 Medication_Patient Pivot Table 和 Med_Time药物_患者数据透视表id       medication_id          patient_id1         1 (MED X)             1 (Patient X)2         2 (MED y)             1 (Patient X)3         2 (MED y)             2 (Patient Y)和 MEdTime 存储时间和给药地点  id        med_patient_id(foreign key)    Day      time      given   1              1                       Yesterday  0900        1   2              1                       Today      0900        0   3              1                       Today      2000        0   4              2                       Today      0600        1 在我拥有的模型上class Medication extends Model {    protected $guarded = [];    public function patient()    {        return $this->belongsToMany('App\Patient');    } }class Patient extends Model{public function medication()    {        return $this->belongsToMany('App\Medication');    }}将药物分配给患者 $assignedMeds = $patient->medication()->get();但它没有给我数据透视表的 ID,我需要找到用药时间,所以我使用了(请让我知道是否有更好的方法来做到这一点)//get the id from medication_patient pivot Table  $medPatient = DB::table('medication_patient')->select('id')                ->Where([                    ['patient_id','=', $patient->id],                    ['medication_id' ,'=', $medication->id]                ])->get()->first;            $medPatientId = $medPatient->id->id;  //Using Medication_patient_id to find MedTime                   $assignedMedTimes = MedTime::where('med_patient_id' ,'=' , $medPatientId)->get();//Filtering the Med Time according to the day             $yesterdayMedTimes = $assignedMedTimes->where('day', '=', 'yesterday')->all();            $todayMedTimes = $assignedMedTimes->where('day', '=', 'today')->all();            $tomorrowMedTimes = $assignedMedTimes->where('day', '=', 'tomorrow')->all();            ]);        }但这仅在我获得 1 次用药时间(分配给患者 X 的 Med X 时间)时才有效,我如何在查询或雄辩中设置循环或关系以获取所有用药时间(患者的 MED X、Y 时间) X)并将其传递到刀片中。
查看完整描述

2 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

您可能会让自己不得不直接转到该查询中的表。如果是我,我可能会考虑稍微重构数据库以使其更容易,并轻松利用 Laravel 关系和枢轴。


我不确定您是否需要将数据存储在两个单独的表中。我希望尽可能地规范化并将其折叠到一个表中。您似乎不需要在Med_Time表中重申自己——该med_patient表添加了多个给定的药丸,因此它与 med_time 表具有相同的目的(我认为)。我建议只使用带有枢轴的药物患者表:


id       medication_id          patient_id         Day      time      given

1         1 (MED X)             1 (Patient X)    Yesterday  0900        1

2         2 (MED y)             1 (Patient X)    Today      0900        0

您的关系将与您拥有的关系大体相同,但您可以直接从模型中绘制支点。这是来自患者模型,但您的关系对您的问题都有好处


public function medication()

    {

        return $this->belongsToMany('App\Medication')->withPivot('Day', 'time', 'given');

    }

然后,当您需要访问数据时,只需拉动枢轴即可。例子:


$patient->pivot->Day... or $patient->pivot->time


查看完整回答
反对 回复 2021-06-25
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

你试过类似的吗?


public function patient()

{

  return $this->belongsToMany('App\Patient')->withPivot(['id']);

}


查看完整回答
反对 回复 2021-06-25
  • 2 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信