Laravel рюкзак 4.0. Сохранить модель, затем другую (другую) - PullRequest
0 голосов
/ 14 марта 2020

В моем проекте laravel / backpack 4.0 у меня есть три модели:

Product:   id, name, ...
Pricebook: id, name, ...
Price:     id, pricebook_id, value, ...

Мне нужно создавать строки в таблице цен каждый раз, когда новый продукт хранится в базе данных идентификаторов. Есть ли такой метод, как «до» или «после» сохранить на крючок? если нет, то другое решение?

Ответы [ 2 ]

0 голосов
/ 15 марта 2020

... Я запутался в чем-то тривиальном, вероятно, в неправильном написании. Это решение поблагодарить Мартина

<?php

namespace App\Http\Controllers\Admin;

use App\Http\Requests\ProductRequest;
use Backpack\CRUD\app\Http\Controllers\CrudController;
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
use App\Models\Price;

class ProductCrudController extends CrudController
{
    use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation {store as traitStore ;}
    use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;

    public function store()
    {
        $request = $this->crud->validateRequest();
        $response = $this->traitStore();

        //get last inserted row id
        $entryID = $this->data['entry']->id;

        $price = new Price();
        $price->product_id = $entryID;
        $price->price = 0;
        $price->save();

        // show a success message
        \Alert::success('New price created in DEFAULT_BASE_PRICEBOOK'))->flash();

        return $response;
    }

    ...
0 голосов
/ 15 марта 2020

Таких хуков нет, но вы можете переопределить эти методы, которые управляют вставкой / обновлением базы данных. Из документации:

Обратные вызовы Разработчики, пришедшие из GroceryCRUD в CodeIgniter или других системах CRUD, будут искать обратные вызовы для запуска before_insert, before_update, after_insert, after_update. В Рюкзаке нет обратных вызовов. Код store () и update () находится внутри черты, поэтому вы можете легко перезаписать этот метод и вызвать его внутри нового метода. Например, вот как мы можем действовать до / после сохранения элемента в операции «Создать»:

namespace App\Http\Controllers\Admin;

use Backpack\CRUD\app\Http\Controllers\CrudController;

class ProductCrudController extends CrudController
{
    use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation { store as traitStore; }

    // ...

    public function store()
    {
      // do something before validation, before save, before everything
      $response = $this->traitStore();
      // do something after save
      return $response;
    }

Источник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...