Php Laravel背包:显示两个同名字段 我所拥有的:

Php Laravel背包:显示两个同名字段 我所拥有的:,php,laravel,crud,backpack-for-laravel,Php,Laravel,Crud,Backpack For Laravel,数据库中的表格: Schema::创建('orders',函数(Blueprint$表){ $table->bigIncrements('id'); $table->unsignedbiginger('primary_person'); $table->unsignedbiginger('secondary_person'); }); Schema::创建('persons',函数(Blueprint$表){ $table->bigIncrements('id'); $table->strin

数据库中的表格:

Schema::创建('orders',函数(Blueprint$表){
$table->bigIncrements('id');
$table->unsignedbiginger('primary_person');
$table->unsignedbiginger('secondary_person');
});
Schema::创建('persons',函数(Blueprint$表){
$table->bigIncrements('id');
$table->string('first_name',255);
$table->string('last_name',255);
});
型号:

类顺序扩展模型
{
使用粗布;
受保护的$table='orders';
受保护的$fillable=[
"主要人士",,
“第二人”,
];
公共职能主要人员()
{
返回$this->hasOne(Person::class,'id','primary_Person');
}
公共职能第二人()
{
返回$this->hasOne(Person::class,'id','secondary_Person');
}
}
需要做什么: 在“页面编辑顺序”中,我想显示有关两个人的信息:

  • 主要人士的姓名
  • 主要人士的姓氏
  • 第二人姓名
  • 第二名人士的姓氏
我所做的: 在OrderCrudController.php中添加了:

$this->crud->addFields([
[
“标签”=>“主要人员的名字”,
'类型'=>'文本',
'name'=>'first_name',
“实体”=>“主要人员”,
'model'=>'App\Models\Person',
],
[
'标签'=>'主要人员的姓氏',
'类型'=>'文本',
“姓名”=>“姓氏”,
“实体”=>“主要人员”,
'model'=>'App\Models\Person',
],
[
'标签'=>'第二个人的名字',
'类型'=>'文本',
'name'=>'first_name',
“实体”=>“第二个人”,
'model'=>'App\Models\Person',
],
[
'标签'=>'第二个人的姓氏',
'类型'=>'文本',
“姓名”=>“姓氏”,
“实体”=>“第二个人”,
'model'=>'App\Models\Person',
]
]);
我收到的: 仅限最新两个字段(辅助人员信息)

我想看什么

主要问题是: 我无法显示具有相同“名称”的字段,因为“名称”-属性(数据库中的列),它也将成为输入的名称。

在列中,使用“键”属性处理这种情况但在字段中它不起作用。

实际上,不能有两个同名字段。在列中可以使用
属性,但正如您所提到的,在创建/更新表单中,这是一个问题,因为HTML表单是如何工作的:只有最后一个输入的值将传递给PHP,并存储在数据库中

我建议您使用。您可以将第二个字段命名为其他名称,即使该列在数据库中不存在。然后在模型中有一个“``setSecondFirstName($value)```方法,该方法接受该值并以您想要的方式保存它


希望有帮助。

可能的解决方案-使用访问器和变异器(非常感谢@tabacitu)。