Laravel 5.1如何删除关联关系

5

我的模型关系是一对多,例如:从患者到样本

患者模型:

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');
}


}

样例模型:

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);
}

但现在只能删除患者....


请查看这个链接:https://dev59.com/oGYq5IYBdhLWcg3w0Txy#15019260 - Emeka Mbah
1
可能是[在Laravel(Eloquent ORM)中自动删除相关行]的重复问题(https://dev59.com/oGYq5IYBdhLWcg3w0Txy)。 - Emeka Mbah
2个回答

4
这是一种实现方式。
public function delete(Request $request){
    $patient = Patient_Model::withTrashed()
        ->find($request->get("id"));

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

还有一种方法是将关系删除附加到父模型的删除事件上,详见此处


这不是 OP 寻找的。你正在控制器内部执行此操作。OP 希望相关行可以自动删除,而无需你提供的答案。 - Emeka Mbah
我可能误解了问题,但这只是对 OP 发布的确切代码进行简单修改,看起来他试图在父模型被删除时删除关系,正如这些行中所提到的:“我认为使用函数 delete Patient 和 Sample”.. “但现在只删除 Patient....”。 - show-me-the-code

2

您在迁移中设置了约束吗?只需将其写入示例表迁移行即可:

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

更多信息请参见:文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接