У меня есть такая модель:
<?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();
чтобы восстановить из сводной таблицы во многих полиморфных отношениях, просто используйте detach:
$posts->photos($photoModel)->detach();
Отношения даже не нужны для этого. Просто используйте модель загрузки напрямую:
Upload::find($id)->delete();
Или даже короче
Upload::destroy($id);