У меня есть следующий код на 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"
на странице редактирования пакета, выбранные тесты не отображаются