【问题标题】:Laravel Orchid data binding in edit form编辑表单中的 Laravel Orchid 数据绑定
【发布时间】:2020-06-05 00:55:11
【问题描述】:

我在 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"

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

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      你忘记了 $target 从数据库中获取数据.. 将此添加到您的 PackageEditLayout

      /**
          * Data source.
          *
          * @var string
          */
         public $target = 'package';
      
      

      【讨论】:

        猜你喜欢
        • 2023-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-19
        • 2013-11-22
        • 2017-04-23
        • 1970-01-01
        相关资源
        最近更新 更多