Laravel 5 分离/移除多态关系
Laravel 5 detach / remove polymorphic relation
我有一个 transactions table
,我可以在其中存储多态关系,payment
或 plan
。我似乎无法得到的是,当我更新现有事务并删除表单中的 payment_id
或 plan_id
时,如何从数据库中清除该关系。
插入(或更新)时,这工作正常:
$payment->transactions()->save($transaction);
我已经尝试了很多方法,但 detach
方法不起作用,因为它不是多对多关系。
我的模特:
交易:
public function paymentable()
{
return $this->morphTo();
}
付款(和计划):
public function transactions()
{
return $this->morphMany(Transaction::class, 'paymentable');
}
有什么想法吗?
基本上我的问题是,当我对现有事务执行更新时,如果没有 payment
或 plan
,我该如何清除 paymentable_id
和 paymentable_type
提交了吗?所以基本上,当 payment
或 plan
从表单中删除时。我不想使用一些 RAW 查询。
用户@zgabievi 的评论是正确的。 dissociate()
自 5.0 以来一直存在。这是将其添加到 MorphTo
关系的提交:https://github.com/laravel/framework/commit/3d6727e1764c37e1219b0a1fc7e003ef61615434#diff-4c052acf0022213a4cc23f53ba42720e
我已经使用这种方法将多态文件记录与其父模型分离。因为在MorphTo
中,子dissociate()
方法被调用
示例:
$attachment = new Attachment; // contains 'attachable' morphTo relationship
$note = new Note; // contains morphyMany relationship to Attachment
// save the Attachment through the attachments relationship, sets morph fields and persists to the database
$note->attachments()->save($attachment);
// populate the morph fields without saving
$attachment->attachable()->associate($note);
// clear the morph fields without saving
$attachment->attachable()->dissociate();
我有一个 transactions table
,我可以在其中存储多态关系,payment
或 plan
。我似乎无法得到的是,当我更新现有事务并删除表单中的 payment_id
或 plan_id
时,如何从数据库中清除该关系。
插入(或更新)时,这工作正常:
$payment->transactions()->save($transaction);
我已经尝试了很多方法,但 detach
方法不起作用,因为它不是多对多关系。
我的模特:
交易:
public function paymentable()
{
return $this->morphTo();
}
付款(和计划):
public function transactions()
{
return $this->morphMany(Transaction::class, 'paymentable');
}
有什么想法吗?
基本上我的问题是,当我对现有事务执行更新时,如果没有 payment
或 plan
,我该如何清除 paymentable_id
和 paymentable_type
提交了吗?所以基本上,当 payment
或 plan
从表单中删除时。我不想使用一些 RAW 查询。
用户@zgabievi 的评论是正确的。 dissociate()
自 5.0 以来一直存在。这是将其添加到 MorphTo
关系的提交:https://github.com/laravel/framework/commit/3d6727e1764c37e1219b0a1fc7e003ef61615434#diff-4c052acf0022213a4cc23f53ba42720e
我已经使用这种方法将多态文件记录与其父模型分离。因为在MorphTo
中,子dissociate()
方法被调用
示例:
$attachment = new Attachment; // contains 'attachable' morphTo relationship
$note = new Note; // contains morphyMany relationship to Attachment
// save the Attachment through the attachments relationship, sets morph fields and persists to the database
$note->attachments()->save($attachment);
// populate the morph fields without saving
$attachment->attachable()->associate($note);
// clear the morph fields without saving
$attachment->attachable()->dissociate();