2015-10-06 63 views
4

我的模型關係是一對多例如:PatientToSampleLaravel 5.1刪除關係

Patient_Model:

class Patient_Model extends Model implements Jsonable{ 

    use SoftDeletes; 

    protected $table = 'patients'; 

    public function samples(){ 
     return $this->hasMany('App\Models\Sample_Model','code','patient_id'); 
} 


} 

Sample_Model:

class Sample_Model extends Model{ 

    use SoftDeletes; 

    protected $table = 'samples'; 

    public function patient(){ 
     return $this->belongsTo('App\Models\Patient_Model','patient_id','code'); 
} 

} 

我想使用的功能刪除病人與樣品的

public function delete(Request $request){ 
    $patient = Patient_Model::withTrashed() 
     ->where("id",$request->get("id")) 
     ->delete(); 

    return json_encode($patient); 
} 

但現在只能刪除病人....

+0

看看這個:http://stackoverflow.com/a/15019260/2772319的[自動刪除相關行 – Digitlimit

+1

可能重複在Laravel(Eloquent ORM)](http://stackoverflow.com/questions/14174070/automatically-deleting-related-rows-in-laravel-eloquent-orm) – Digitlimit

回答

4

這是一種方法。

public function delete(Request $request){ 
    $patient = Patient_Model::withTrashed() 
     ->find($request->get("id")); 

    $patient->samples()->delete(); 
    $patient->delete(); 
    return json_encode($patient); 
} 

還有的關係刪除連接到父模型的刪除事件的方式,所討論的here

+0

這不是OP所期待的。你在控制器內部這樣做。 OP希望相關行可以自動刪除,而不需要您提供的答案。 – Digitlimit

+0

我可能誤解了這個問題,但這是對OP張貼的確切代碼的一個簡單修改,並且在我看起來像他正試圖刪除關係時父模型被刪除,如以下行中所述:「我認爲使用函數刪除患者和樣本「..」但現在只能刪除患者....「。 –

1

您是否在遷移中設置了約束條件? 只要寫到樣品表遷移行:

$table->foreign('patient_id') 
     ->references('id') 
     ->on('patients') 
     ->onDelete('cascade'); 

欲瞭解更多信息:Docs