首页 > 解决方案 > 编辑表单中的 Laravel Orchid 数据绑定

问题描述

我在 Laravel orchid 平台中有以下代码,我正在尝试更新一个字段以及可以选择多个的关系字段。在添加新表单上,我添加了这些属性并且它们已被插入到表格中,但它们在编辑表单中未显示为选中状态。任何人都可以帮忙吗?

//EditPackageScreen.php
<?php

namespace App\Orchid\Screens\Package;

use Orchid\Screen\Screen;
use Orchid\Screen\Actions\Button;
use Orchid\Screen\Layout;
use Orchid\Screen\Fields\Input;
use Illuminate\Http\Request;
use App\Orchid\Layouts\Package\PackageEditLayout;
use Orchid\Support\Facades\Toast;


use App\Package;

class EditPackageScreen extends Screen
{
    /**
     * Display header name.
     *
     * @var string
     */
    public $name = 'Edit Package';

    /**
     * Display header description.
     *
     * @var string
     */
    public $description = 'Edit package details in the form below.';

    /**
     * Query data.
     *
     * @return array
     */
    public function query(Package $package): array
    {
        $package->load(['tests']);
        dd($package);
        return [
            'package' => $package
        ];
    }

    /**
     * Button commands.
     *
     * @return Action[]
     */
    public function commandBar(): array
    {
        return [
            Button::make(__('Update'))
                ->icon('icon-check')
                ->confirm('Are you sure you want to update this package?')
                ->method('updatepackage'),
        ];
    }

    /**
     * Views.
     *
     * @return Layout[]
     */
    public function layout(): array
    {
        return [
            PackageEditLayout::class,
        ];
    }

    public function updatepackage(Request $request){
        $package = Package::find($request->package['id']);
        $package->name = $request->package['name'];

        $response = $package->update();

        if(!$response){
            Toast::error('Something went wrong! Could not update package.');
        }else{
            Toast::success('Package updated!');
        }

        return back();
    }
}
//PackageEditLayout.php
<?php

declare(strict_types=1);

namespace App\Orchid\Layouts\Package;

use Orchid\Screen\Fields\Input;
use Orchid\Screen\Layouts\Rows;
use Orchid\Screen\Fields\Select;
use App\Test;

class PackageEditLayout extends Rows
{
    /**
     * Views.
     *
     * @throws \Throwable|\Orchid\Screen\Exceptions\TypeException
     *
     * @return array
     */
    public function fields(): array
    {
        return [
            Input::make('package.name')
                ->type('text')
                ->max('100')
                ->required()
                ->title(__('Name'))
                ->placeholder(__('Package Name')),

            Select::make('package.tests.')
                    ->fromModel(Test::class, 'item_name')
                    ->multiple()
                    ->title(__('Tests'))
                    ->help('Specify tests under this package.'),

            Input::make('package.id')
                ->type('hidden'),
        ];
    }
}
//Package.php (Model)
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Orchid\Filters\Filterable;
use Orchid\Screen\AsSource;

class Package extends Model
{
    use AsSource, Filterable;

    protected $allowedSorts = [
        'name',
        'created_at',
        'updated_at'
    ];

    protected $allowedFilters = [
        'name'
    ];

    public function tests(){
        return $this->belongsToMany('App\Test', 'test_packages', 'package_id', 'test_id');
    }
}

//Tables
//tests
"Field" "Type"  "Null"  "Key"   "Default"   "Extra"
"id"    "bigint(20) unsigned"   "NO"    "PRI"   \N  "auto_increment"
"item_number"   "varchar(255)"  "NO"    ""  \N  ""
"item_name" "varchar(255)"  "NO"    ""  \N  ""
"created_at"    "timestamp" "YES"   ""  \N  ""
"updated_at"    "timestamp" "YES"   ""  \N  ""

//packages
"Field" "Type"  "Null"  "Key"   "Default"   "Extra"
"id"    "bigint(20) unsigned"   "NO"    "PRI"   \N  "auto_increment"
"name"  "varchar(255)"  "NO"    ""  \N  ""
"created_at"    "timestamp" "YES"   ""  \N  ""
"updated_at"    "timestamp" "YES"   ""  \N  ""

//test_packages
"Field" "Type"  "Null"  "Key"   "Default"   "Extra"
"package_id"    "bigint(20) unsigned"   "NO"    "PRI"   \N  ""
"test_id"   "bigint(20) unsigned"   "NO"    "PRI"   \N  ""

//test_packages data
"package_id"    "test_id"
"12"    "1"
"12"    "4"
"12"    "7"

在包编辑页面上,选定的测试不显示

标签: phplaraveleloquent

解决方案


没关系,问题出在包裹本身。我已经和作者谈过了,他已经发布了一个新版本来解决这个问题。


推荐阅读