php - 编辑表单中的 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"
在包编辑页面上,选定的测试不显示
解决方案
没关系,问题出在包裹本身。我已经和作者谈过了,他已经发布了一个新版本来解决这个问题。
推荐阅读
- python - 如何猜测 Mathieu 方程的数值解
- postgresql - 如何在 GORM 中正确创建 ForeignKey | Golang 应用程序?
- angularjs - 如何在 webpack 中添加依赖?
- php - mysqli_real_escape_string 不插入数据库
- mongodb - 我如何将 Beego 框架与 MongoDB 集成
- java - Spring boot AngularJs $http.get 为空
- android - 如何在 android 中使用 Mock Api?
- dialogflow-es - 如何将图像添加到 android studio 中的对话流聊天机器人
- angular - 无法为 ag-grid 中的列应用百分比转换
- python - 用方括号更新字典中的值