【问题标题】:Backpack for Laravel: how to add 'delete' per-line button conditionally?Laravel 的背包:如何有条件地添加“删除”每行按钮?
【发布时间】:2020-12-23 14:17:55
【问题描述】:

我有一个可以有 n 个孩子的父模型

所以我只想在没有子项的情况下显示删除按钮(hasMany 关系必须返回 0 条记录)。

如何在表格的每一行(在列表操作中)显示“删除”链接,但前提是条件有效?

【问题讨论】:

    标签: laravel laravel-backpack


    【解决方案1】:

    我看到的最简单的选择是为Delete 按钮使用自定义视图,而不是包中的那个。取决于您希望进行此更改的范围:

    A.如果您想在所有 CRUD 中执行此操作 - 很简单,只需运行 publish the view

    php artisan backpack:publish crud/buttons/delete
    

    这会将文件放在您的resources/views/vendor/backpack/crud/buttons 中,供您随意更改。在the delete button view 中,当前条目为$entry,因此您可以根据需要执行$entry->children()->count() 之类的操作。请注意,这将每行运行一次,因此,例如,如果您在表中显示 50 行,则需要找到一种优化方法。

    B.如果您只想为一个 CRUD 执行此操作(例如,为类别而不是产品),那么您可以执行相同的操作(发布按钮视图),但将按钮重命名为不同的名称,例如 @ 987654328@ 以便它不会自动用于所有 CRUD。然后仅在您想要的控制器内使用它,在 setupListOperation() 内,删除“库存”删除按钮并添加您的:

    // using the Backpack array syntax
    $this->crud->removeButton('delete');
    $this->crud->addButton('line', 'delete', 'view', 'crud::buttons.delete_if_no_children', 'end');
    
    // using the Backpack fluent syntax
    CRUD::button('delete')->view('crud::buttons.delete_if_no_children');
    

    【讨论】:

      【解决方案2】:

      使用

      withCount('children')
      

      文档:withCount


      此外,您可以使用刀片指令包装删除按钮

      @can('destroy', $model) disabled @endcan
      

      文档:@can

      <?php
      
      namespace App\Policies;
      
      use App\Models\Model;
      use App\Models\User;
      
      class ModelPolicy
      {
          public function update(User $user, Model $model)
          {
              return $model->children_count === 0;
          }
      }
      

      文档:policy

      【讨论】:

      • 抱歉,我的问题是针对“laravel 背包”的。不过谢谢
      【解决方案3】:

      当没有关联记录时,hasMany 关系将返回空的 Collection。然后您可以继续在集合上调用isEmpty() 以验证没有子记录(孩子)。

      PHP 中的示例:

      $parents = Parent::with('children')->get();
      

      然后在你的模板中你可以这样做:

      @foreach($parents as $parent)
          @if($parent->children->isEmpty())
              <button>Delete</button>
          @endif
      @endforeach
      

      【讨论】:

      • 抱歉,我的问题是针对“laravel 背包”的。不过谢谢
      猜你喜欢
      • 2022-01-15
      • 2020-01-15
      • 2020-04-06
      • 1970-01-01
      • 2013-07-05
      • 1970-01-01
      • 2018-07-29
      • 2020-03-18
      • 2021-11-25
      相关资源
      最近更新 更多