关于多列一对多的展示问题
表 china_area
id | parent_id | code | name |
---|
1 | 0 | 100000 | 中华人民共和国 |
模型定义
class ChinaArea extends Model
{
protected $table = 'china_area'; // 定义模型对应的数据库表名
public $timestamps = false; // 关闭自动添加创建时间和更新时间
public parent()
{
// 参数列表为:模型(ChinaArea::class),外键列名(parent_id),本地键列名(id)
return $this->belongsTo(ChinaArea::class, 'parent_id');
}
...
}
表 demo_addresses
id | name | mobile | province_id | city_id | district_id | address |
---|
1 | xiaoming | 1337033xxxx | 370000 | 370100 | 370102 | 中铁财智中心 |
模型定义
class Address extends Model
{
protected $table = 'demo_addresses'; // 定义模型对应的数据库表名
// 省的关联
public function province()
{
return $this->belongsTo(ChinaArea::class, 'province_id', 'code');
}
// 市的关联
public function city()
{
return $this->belongsTo(ChinaArea::class, 'city_id', 'code');
}
// 区的关联
public function district()
{
return $this->belongsTo(ChinaArea::class, 'district_id', 'code');
}
}
数据表格 grid 的列展示
// 本表的列展示
$grid->column('name', __('Contact Name'));
// 关联数据的展示
$grid->column('province.name', __('Province'));
// 合并多列的展示
$grid->column('Area',__('Area'))->display(function (){
return $this->province->name.'-'.$this->city->name.'-'.$this->district->name;
});
详情 detail 的数据展示
// 默认模型查询
// $show = new Show(Address::findOrFail($id));
// 展示关联列数据的时候,必须重新定义模型查询
$address = Address::with('province')->with('city')->with('district')->findOrFail($id);
$show = new Show($address);
// 本表数据的展示
$show->field('name', __('Contact Name'));
$show->mobile(__('Contact Phone'));
// 展示关联列数据的时候,必须重新定义模型查询
$show->field('anyName', __('Area'))->as(function (){
return $this->getRelation('province')->name.'-'.$this->getRelation('city')->name.'-'.$this->getRelation('district')->name;
});
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。