数据库中的表
Schema::create('orders', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('primary_person');
$table->unsignedBigInteger('secondary_person');
});
Schema::create('persons', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('first_name', 255);
$table->string('last_name', 255);
});
型号:
class Order extends Model
{
use CrudTrait;
protected $table = 'orders';
protected $fillable = [
'primary_person',
'secondary_person',
];
public function primaryPerson()
{
return $this->hasOne(Person::class, 'id', 'primary_person');
}
public function secondaryPerson()
{
return $this->hasOne(Person::class, 'id', 'secondary_person');
}
}
在编辑命令页上,我想显示有关两个人的信息:
在OrderCrudController.php中添加:
$this->crud->addFields([
[
'label' => 'First Name of Primary person',
'type' => 'text',
'name' => 'first_name',
'entity' => 'primaryPerson',
'model' => 'App\Models\Person',
],
[
'label' => 'Last Name of Primary person',
'type' => 'text',
'name' => 'last_name',
'entity' => 'primaryPerson',
'model' => 'App\Models\Person',
],
[
'label' => 'First Name of Secondary person',
'type' => 'text',
'name' => 'first_name',
'entity' => 'secondaryPerson',
'model' => 'App\Models\Person',
],
[
'label' => 'Last Name of Secondary person',
'type' => 'text',
'name' => 'last_name',
'entity' => 'secondaryPerson',
'model' => 'App\Models\Person',
]
]);
仅最近两个字段(辅助人信息)。
我无法显示具有相同“ name” 的字段,因为“ name” -属性(数据库中的列),该属性也将成为名称输入的内容。
在“列”中,这种情况是通过“ key” 属性处理的。 但是在“字段”中它不起作用。
答案 0 :(得分:1)
可能的解决方案–使用访问器和更改器(非常感谢@tabacitu)。
https://dev.to/sergunik/how-to-display-two-fields-with-same-name-in-backpack-for-laravel-8b1
答案 1 :(得分:0)
实际上,不能有两个具有相同名称的字段。在列中可以使用key
属性,但是正如您已经提到的,在创建/更新表单中,这是一个问题,这是因为HTML表单的工作方式:只有最后输入的值将传递给PHP,以进行存储在数据库中。
我建议您使用accessors & mutators解决此问题。您可以将第二个字段命名为其他名称,即使该列在数据库中不存在。然后,只需在模型内部有一个setSecondFirstName($ value)方法,该方法就可以使用该值并将其保存为所需的值。
希望有帮助。