表中的列表项,用于显示页面上的关系-laravel背包

问题描述 投票:0回答:1

刚刚带背包。我在官方网站上搜索并用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 backpack-for-laravel
1个回答
0
投票

不知道它是否是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}";
}

不知道是否有更好的方法...希望这对其他人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.