亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 177 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號