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 删除关系的主要内容,如果未能解决你的问题,请参考以下文章
从 5.1 迁移到 5.3 时急切加载关系的 Laravel 错误