php - tablas - ¿Cómo eliminar una relación polimórfica en Eloquent?
tablas polimorficas laravel (2)
$posts->photos()
es la consulta de relación para devolver todas las fotos para una publicación. Si llama a delete()
sobre eso, eliminará todos esos registros. Si solo desea eliminar un registro específico, debe asegurarse de llamar solo a eliminar en el que desea eliminar. Por ejemplo:
$posts->photos()->where(''id'', ''='', 1)->delete();
Tengo un modelo como este:
<?php
class Post extends Eloquent {
protected $fillable = [];
public function photos()
{
return $this->morphMany(''Upload'', ''imageable'');
}
public function attachments()
{
return $this->morphMany(''Upload'', ''attachable'');
}
}
y el esquema de mi tabla morphMany
es así:
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;
ahora necesito eliminar una fila de esta tabla, probé $posts->photos()->delete();
pero eliminó todas las filas asociadas a esta Post
.
¿Alguien podría ayudarme?
La relación ni siquiera es necesaria para esto. Simplemente use el modelo de carga directamente:
Upload::find($id)->delete();
O incluso más corto:
Upload::destroy($id);