2015-10-06 107 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