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

能有人帮我拿到这个数字开始out.To这是不是重复的CRUD在Laravel三个表/模型之间的关系和。


有 2 个表 Medication_Patient Pivot Table 和 Med_Time


药物_患者数据透视表


id       medication_id          patient_id

1         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)并将其传递到刀片中。



墨色风雨
浏览 146回答 2
2回答

白衣染霜花

您可能会让自己不得不直接转到该查询中的表。如果是我,我可能会考虑稍微重构数据库以使其更容易,并轻松利用 Laravel 关系和枢轴。我不确定您是否需要将数据存储在两个单独的表中。我希望尽可能地规范化并将其折叠到一个表中。您似乎不需要在Med_Time表中重申自己——该med_patient表添加了多个给定的药丸,因此它与 med_time 表具有相同的目的(我认为)。我建议只使用带有枢轴的药物患者表:id       medication_id          patient_id         Day      time      given1         1 (MED X)             1 (Patient X)    Yesterday  0900        12         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

潇潇雨雨

你试过类似的吗?public function patient(){  return $this->belongsToMany('App\Patient')->withPivot(['id']);}
打开App,查看更多内容
随时随地看视频慕课网APP