刚刚带背包。我在官方网站上搜索并用Google搜索,但没有找到答案
在laravel 7中,使用背包4.1
我的数据模型是:客户有很多地址
在客户模型中配置了关系:
public function addresses()
{
return $this->hasMany(\App\Models\Address::class, 'user_id');
}
关系在地址模型中配置:
public function customer()
{
return $this->belongsTo(\App\Models\Customer::class);
}
public function country()
{
return $this->belongsTo(\App\Models\Country::class);
}
public function address_type()
{
return $this->belongsTo(\App\Models\AddressType::class);
}
在我的客户显示页面上,我想在表格中的客户详细信息下方显示所有客户地址。因此,在我的CustomerCrudController中,我实现了此方法:
protected function setupShowOperation()
{
$this->crud->set('show.setFromDb', false);
$this->crud->addColumn(['name' => 'name', 'type' => 'text', 'label' => __('models/customers.fields.name'), ]);
$this->crud->addColumn(['name' => 'email', 'type' => 'email', 'label' => __('models/customers.fields.email'), ]);
$this->crud->addColumn([
'name' => 'addresses',
'label' => __('models/addresses.plural'),
'type' => 'table',
'columns' => [
'address_type_id' => __('models/addresses.fields.address_type'),
'address_type.name' => __('models/addresses.fields.address_type'),
'address1' => __('models/addresses.fields.address1'),
'address2' => __('models/addresses.fields.address2'),
'city' => __('models/addresses.fields.address2'),
'postal_code' => __('models/addresses.fields.address2'),
'country.name' => __('models/countries.singular'),
],
]);
}
[当我进入页面时:/ admin / customer / 3 / show,在调试栏中,我看到了查询如何加载地址
select * from `addresses` where `addresses`.`user_id` = 3 and `addresses`.`user_id` is not null
我用来自数据库中数据的相应行数渲染了表格,但是行为空白。这是正确的方法吗?正确的参数是什么?有没有一种方法可以显示带有操作按钮的表(显示条目,编辑)-与“列表”视图中的相同?
是否应该以其他方式实施?
希望我很清楚。谢谢
不知道它是否是laravel错误,但是我的解决方案是基于文件创建自己的表刀片:
\ vendor \ backpack \ crud \ src \ resources \ views \ crud \ columns \ table.blade.php
并且创建了我自己的:\ resources \ views \ vendor \ backpack \ crud \ columns \ address_table.blade.php
我刚刚更改了文件:40
@elseif( is_object($tableRow) && property_exists($tableRow, $tableColumnKey) )
to
@elseif( is_object($tableRow) && isset($tableRow->{$tableColumnKey}) )
现在,在我的CustomerCrudController.php中:
protected function setupShowOperation()
{
$this->crud->set('show.setFromDb', false);
$this->crud->addColumn(['name' => 'name', 'type' => 'text', 'label' => __('models/customers.fields.name'),]);
$this->crud->addColumn(['name' => 'email', 'type' => 'email', 'label' => __('models/customers.fields.email'),]);
$this->crud->addColumn([
'name' => 'addresses',
'label' => __('models/addresses.plural'),
'type' => 'address_table', // my custom type
'model' => \App\Models\Address::class,
'entity' => 'addresses',
'columns' => [
'address_type_name' => __('models/addresses.fields.address_type'),
'postal_code' => __('models/addresses.fields.postal_code'),
'city' => __('models/addresses.fields.city'),
'address1' => __('models/addresses.fields.address1'),
'address2' => __('models/addresses.fields.address1'),
],
]);
}
并且我在模型(Address.php)中添加了一个访问器
public function getAddressTypeNameAttribute()
{
return "{$this->address_type->name}";
}
不知道是否有更好的方法...希望这对其他人有帮助。