Laravel Привязка данных орхидей в форме редактирования - PullRequest
2 голосов
/ 20 февраля 2020

У меня есть следующий код на 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"

на странице редактирования пакета, выбранные тесты не отображаются

1 Ответ

0 голосов
/ 22 февраля 2020

Неважно, проблема была в самой упаковке. Я поговорил с автором, и он выпустил новую версию, которая исправляет эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...