Laravel, метод Detach () для удаления родительских записей - PullRequest
0 голосов
/ 19 декабря 2018

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

Это мои таблицы

  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 Ответ

0 голосов
/ 19 декабря 2018

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

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

In 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();
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...