Laravel, метод Detach () для удаления родительских записей

Привет, ребята, я работаю со многими по многим отношениям, и я хочу знать, есть ли способ удалить записи основной таблицы.

Это мои столы

  Schema::create('inventario_inicial', function (Blueprint $table) {
$table->increments('id');
$table->integer('producto_nombre_id')->unsigned();
$table->foreign('producto_nombre_id')->references('id')->on('producto_nombre');
$table->integer('existencias');
$table->double('promedio');
$table->timestamps();
});
Schema::create('empresa_inventario_inicial', function (Blueprint $table) {
$table->integer('empresa_id')->unsigned();
$table->foreign('empresa_id')->references('id')->on('empresas');
$table->integer('inventario_inicial_id')->unsigned();
$table->foreign('inventario_inicial_id')->references('id')->on('inventario_inicial');
});

Я могу получить данные через сводку с этим кодом

$empresa = Empresa::find($request->empresa_id);
$empresa->inventario_inicial();

Чтобы отделить данные этого $empresa я использую $empresa->inventario_inicial()->detach();

Это удаляет записи сводной таблицы, которая является правильной, но также я хочу удалить не только то, что в empresa_inventario_inicial но также inventario_inicial которые были связаны. Что-то вроде каскадного удаления, но из сводной таблицы.

1

Решение

Ты можешь использовать $table->foreign('inventario_inicial_id')->references('id')->on('inventario_inicial')->onDelete('cascade') в вашей миграции.

Если вы не хотите каскадировать, подумайте об использовании модели События автоматически отсоединять любой empresa_inventario_official сводные записи при удалении inventario_official, а затем используйте $empresa->inventario_inicial()->delete() метод вместо вашего detach() выше.

В App\InventarioOfficial:

protected $dispatchesEvents = ['deleting' => InventarioDeleting::class];

Затем вы можете определить событие и слушателя для события:

В App\Events\InventarioDeleting

class InventarioDeleting
{
use SerializesModels;

public $inventario_official;

public function __construct(InventarioOfficial $inventario_official)
{
$this->inventario_official = $inventario_official;
}
}

В App\Providers\EventServiceProvider

public function boot()
{
parent::boot();

Event::listen(\App\Events\InventarioDeleting::class, function ($io) {
DB::('empresa_inventario_inicial')->where('inventario_inicial_id',$io->id)->delete();
//or $io->empresas()->detach();
});
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector