gpt4 book ai didi

laravel - 显示页面上关系表中的 ListEntries - laravel 背包

转载 作者:行者123 更新时间:2023-12-04 13:14:04 27 4
gpt4 key购买 nike

刚刚带背包的新品。我在官方网站上搜索并用谷歌搜索,但没有找到答案

在 laravel 7 中,使用 Backpack 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

我用数据库中数据的相应行数呈现了表格,但行是空白的。这是正确的方法吗?什么是正确的参数?有没有办法显示带有操作按钮(显示条目、编辑)的表格 - 与 ListView 相同?

是否应该以其他方式实现?

希望我说清楚了。谢谢

最佳答案

不知道这是否是 laravel 错误,但我的解决方案是基于文件创建我自己的表格 Blade :

\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) ) 

@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}";
}

不知道有没有更好的方法...希望这会帮助其他人。

关于laravel - 显示页面上关系表中的 ListEntries - laravel 背包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62149733/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com