[英]How to remove a polymorphic relation in Eloquent?
我有一个这样的模型:
<?php
class Post extends Eloquent {
protected $fillable = [];
public function photos()
{
return $this->morphMany('Upload', 'imageable');
}
public function attachments()
{
return $this->morphMany('Upload', 'attachable');
}
}
我的morphMany
表的架构是这样的:
CREATE TABLE `uploads` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`raw_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`size` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`downloads` int(11) NOT NULL DEFAULT '0',
`imageable_id` int(11) DEFAULT NULL,
`imageable_type` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
`attachable_id` int(11) DEFAULT NULL,
`attachable_type` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
`user_id` int(10) unsigned NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
KEY `uploads_user_id_index` (`user_id`),
CONSTRAINT `uploads_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `posts` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=45 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
现在我需要删除这张表的一行,我试过$posts->photos()->delete();
但它删除了与此Post
关联的所有行。
有人可以帮助我吗?
$posts->photos()
是返回帖子的所有照片的关系查询。 如果您对此调用delete()
,它将删除所有这些记录。 如果您只想删除特定记录,则需要确保只对要删除的记录调用 delete。 例如:
$posts->photos()->where('id', '=', 1)->delete();
要从多对多多态关系中的数据透视表中删除,只需使用分离:
$posts->photos($photoModel)->detach();
甚至不需要这种关系。 直接使用 Upload 模型即可:
Upload::find($id)->delete();
或者更短:
Upload::destroy($id);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.