如何在Laravel Backpack中获取两个或更多字段作为关系中的属性

iyfjxgzm  于 2023-11-20  发布在  其他
关注(0)|答案(1)|浏览(123)

我有一个数据库的结构:

products(id, name, description, SKU, price, current_stock) <br/>
orders(id, date,name, description, product_SKU, price, current_stock)

字符串
在顺序控制器我有

CRUD::field([
    'type'=>'select2',
    'name'=>'product_name',
    'label'=>'Product Name',
    'model'=>'App\Models\Products',
    'attribute'=>'name',
    'allows_null'=>true,
    'entity'=>'productrelation',
]);

CRUD::field([
    'type'=>'text',
    'name'=>'product_sku',
    'label'=>'Product SKU',
    'attributes' => [
        'readonly' => true,
    ],
    'entity' => 'productrelation',
    'attribute' => 'sku',
    'depends_on' => [
        'product_name' => '!=null',
    ],
    'value' => function($crud) {
        $product= \App\Models\Products::where('product_name', $crud->getRequest()->input('product_name'))->first();
        return $product ? $product->sku : '';
    }
]);


选择产品名称后,应使用产品数据库中的数据填充字段product_SKUpricecurrent_stock(此字段是只读的)。product_name字段可以很好地显示所有产品名称,但问题是我不知道如何填充其他字段。我试着将值设置为一个函数,该函数应该基于在product_name上选择(我认为这是正确的),但它不检索字符串,并抛出错误。

vmjh9lq9

vmjh9lq91#

如果您希望当有人在Orders中选择某个product时,product_SKUpricecurrent_stock字段被完成,您应该能够在JS中使用CrudField JS API完成。您将需要:

  • 响应请求的API
  • 一段JS,它向该API发送调用以获取正确的信息
  • 一些JS在“虚拟输入”上设置这些值(这里是您将使用CrudField JS API的地方)

请查看分步指南。
作为个人意见...对于像你这样的关系,我不会使用这样的自定义字段,但是relationship字段,它也允许子字段。
换句话说:如果一个订单可以有多个产品,当我打开一个“订单”时,我希望能够..选择多个产品。
我会发现这更直观,而且你可以很容易地实现这一点,不需要自定义代码,使用relationship字段和子字段。
希望有帮助!

相关问题