【问题标题】:Laravel Backpack 4.0. Save a model then another one (different)Laravel 背包 4.0。保存一个模型,然后保存另一个(不同)
【发布时间】:2020-03-16 01:56:04
【问题描述】:

在我的 laravel/backpack 4.0 项目中,我有三个模型:

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

每次存储新产品 id 数据库时,我都需要在价格表中创建一行。 是否有类似“之前”或“之后”保存挂钩的方法? 如果没有,还有其他解决方案吗?

【问题讨论】:

    标签: laravel laravel-backpack


    【解决方案1】:

    ...我对一些琐碎的事情感到困惑,可能是拼写错误。这是解决方案谢谢马丁

    <?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;
        }
    
        ...
    

    【讨论】:

      【解决方案2】:

      没有这样的钩子,但您可以覆盖这些控制数据库插入/更新的方法。来自文档:

      回调 来自 CodeIgniter 或其他 CRUD 系统上的 GroceryCRUD 的开发人员将寻找回调来运行 before_insert、before_update、after_insert、after_update。 Backpack 中没有回调。 store() 和 update() 代码位于 trait 中,因此您可以轻松覆盖该方法,并在新方法中调用它。例如,我们可以在创建操作中保存项目之前/之后执行以下操作:

      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;
          }
      

      Source

      【讨论】:

      • 谢谢马丁,这是我需要的第一部分...第二部分是:如何创建价格行?我无法构建新的 Model/Price(),App/Model/Price 在这个命名空间之外...
      • @GiordoG 你为什么不能呢?您可以从其他命名空间实例化类:使用 App\Model\Price; $price = new Price();
      • 对不起,我是新手,你是什么意思?错误消息说:'App\Http\Controllers\Admin\Model\Price' 不存在价格模型在'App/Models/Price ...
      • 首先,命名空间使用反斜杠 \ -- 您可能是指 App/Model/Price.php 文件?该文件的命名空间是什么?
      • 如果你不知道我在说什么,把价格模型贴在这里让我看看
      猜你喜欢
      • 2020-05-18
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2016-06-22
      • 2015-01-31
      • 1970-01-01
      相关资源
      最近更新 更多