Laravel 5.1 删除关系

Posted

技术标签:

【中文标题】Laravel 5.1 删除关系【英文标题】:Laravel 5.1 Delete relationships 【发布时间】:2016-01-02 20:31:51 【问题描述】:

我的模型关系是 oneToMany 例如:PatientToSample

患者模型:

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

但现在只删除 Patient....

【问题讨论】:

看看这个:***.com/a/15019260/2772319 Automatically deleting related rows in Laravel (Eloquent ORM)的可能重复 【参考方案1】:

这是一种方法。

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

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

还有一种方法可以将关系删除附加到父模型的删除事件,如 here 所讨论的那样。

【讨论】:

这不是 OP 想要的。您正在控制器内执行此操作。 OP 希望自动删除相关行,而不需要您给出的答案。 我可能误解了这个问题,但这是对发布的确切代码 OP 的简单修改,在我看来,当父模型被删除时,他正试图删除关系,如这些行中所述: "我认为使用删除病人和样本的功能".. " 但现在只删除病人......".【参考方案2】:

您是否在迁移中设置了限制? 只需写入示例表迁移行:

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

欲了解更多信息:Docs

【讨论】:

以上是关于Laravel 5.1 删除关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.1 - 关系方法必须返回一个类型的对象

从 5.1 迁移到 5.3 时急切加载关系的 Laravel 错误

Laravel 5.1 - 具有空值的模型上的关系

Laravel 5.1 中 3 个模型之间的关系(“像多对多通过”)

Laravel 5.1用eloquent删除DB中的重复项

震惊,这篇文章竟然因为色情原因被删除 | laravel 5.5 相对 5.1 中的变动