如何在Eloquent中删除多态关系? [英] How to remove a polymorphic relation in Eloquent?

查看:42
本文介绍了如何在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 表的架构是这样的:

and my morphMany table's schema is like this:

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相关的所有行.

now I need to remove one row of this table, I tried $posts->photos()->delete(); but it removed all rows associated to this Post.

有人可以帮我吗?

推荐答案

$ posts-> photos()是一种关系查询,用于返回帖子的所有照片.如果在其上调用 delete(),它将删除所有这些记录.如果只想删除特定记录,则需要确保仅对要删除的记录调用delete.例如:

$posts->photos() is the relationship query to return all of the photos for a post. If you call delete() on that, it will delete all of those records. If you only want to delete a specific record, you need to make sure you only call delete on the one you want to delete. For example:

$posts->photos()->where('id', '=', 1)->delete();

这篇关于如何在Eloquent中删除多态关系?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆