izica/relations-widgets-for-backpack

用于在laravel backpack中预览模型关系的Widget

3.3.2 2023-07-02 16:21 UTC

This package is auto-updated.

Last update: 2024-08-31 00:33:21 UTC


README

  1. 安装
  2. 屏幕截图
  3. 功能
  4. 文档
  5. 用法
  6. 如何启用创建相关模型

3.0 新特性

  • relation_table 搜索输入
  • relation_table 创建按钮与关系属性引用
  • relation_table 分页

Alt text

安装

composer require izica/relations-widgets-for-backpack

屏幕截图

Alt text Alt text

功能

  • 在显示操作中使用Widget显示关系
  • 根据条件显示或隐藏面板或字段
  • 通过闭包构建字段值
  • 使用点ORM表示法访问关系字段

文档

  • relation_panel

    • name - 关系名称
    • label - 面板标签
    • backpack_crud - backpack crud url
    • buttons (可选) - 设置 false 隐藏所有操作按钮
    • button_show (可选) - 设置 false 隐藏
    • button_edit (可选) - 设置 false 隐藏
    • visible (可选) - 闭包用于隐藏或显示面板
    • fields (可选) - 字段数组,默认从模型的 fillable 获取列
      • name - 名称
      • label - 字段标签
      • closure - 使用闭包代替名称字段
      • visible(可选) - 闭包用于隐藏或显示面板
  • relation_table

    • name - (必填) 关系名称
    • label - 面板标签
    • relation_attribute - (可选) 用于传递按钮_create 的url参数名称
    • search - (可选) closure,启用搜索输入
    • per_page - (可选) 启用分页,默认为 null
    • backpack_crud - backpack crud url
    • buttons (可选) - 设置 false 隐藏所有操作按钮
    • button_create (可选) - 设置 false 隐藏
    • button_show (可选) - 设置 false 隐藏
    • button_edit (可选) - 设置 false 隐藏
    • button_delete (可选) - 设置 false 隐藏
    • visible (可选) - closure 用于隐藏或显示面板
    • columns (可选) - 列数组,默认从模型的 fillable 获取列
      • name - 名称
      • label - 字段标签
      • closure - 使用 closure 代替名称字段传递值

用法

关系面板

belongsTohasOne

use Backpack\CRUD\app\Library\Widget;

protected function setupShowOperation()
{
    Widget::add([
        'type'           => 'relation_panel',
        'name'           => 'account_contact',
        'label'          => 'Account contact info',
        'backpack_crud'  => 'accountcontact',
        'visible' => function($entry){
            return $entry->is_public_person;
        },
        'buttons' => false,
        'fields'         => [
            [
                'label' => 'Birthdate',
                'closure' => function($entry){
                    return date('d.M.Y', $entry->birthdate);
                }
            ],
            [
                'label' => 'Contact phone',
                'name'  => 'contact_phone',
            ],
            [
                'label' => 'Contact email',
                'name'  => 'contact_email',
            ],
            [
                'label' => 'Address',
                'name'  => 'address.name',
                'visible' => function($entry){
                    return !!$entry->address;
                }       
            ],
        ],
    ])->to('after_content');
}

关系表

hasMany

protected function setupShowOperation()
{
    Widget::add([
        'type'           => 'relation_table',
        'name'           => 'order_cargos',
        'label'          => 'Order cargo list',
        'backpack_crud'  => 'ordercargo',
        'visible' => function($entry){
            return $entry->order_cargos->count() > 0;
        },
        'search' => function ($query, $search) {
            return $query->where('name', 'like', "%{$search}%");
        },
        'relation_attribute' => 'order_id',
        'button_create' => true,
        'button_delete' => false,
        'columns' => [
            [
                'label' => 'Type',
                'name'  => 'order_cargo_type.name',
            ],
            [
                'label' => 'Weight',
                'name'  => 'weight',
            ],
            [
                'label' => 'Value, $',
                'closure' => function($entry){
                    return "{$entry->value}$";
                }
            ],
        ],
    ])->to('after_content');
}

如何启用创建相关模型

您需要设置

  • button_create => true
  • relation_attribute => attribute_name

接下来您需要在关系/选择字段中添加 default

    CRUD::addField([
        'type' => "relationship",
        'name' => 'order',
        'default' => $_GET['order_id'] ?? null
    ]);