Laravel-admin 一对多关系的详解

多态根系
• 阅读 5273

一对多关联

表 demo_users , demo_addresses,他们的关系为:一个用户有多个收货地址。一个收货地址,只能关联到一个用户。

表 demo_users

idusernamepasswordemail
1tom123456tom123@qq.com

Model User.php

public function address(){
    return $this->hasMany(Address::class, 'user_id', 'id');
}

数据展示

在用户表中展示地址信息。因为用户和地址是一对多的关系,所以,展示地址信息的时候,需要采用列展开或者模态框展示。注意,默认地址信息中不包含省市区的名称信息,需要通过With获得省市区的信息。

Grid

在 用户表格页面,通过扩展列,展示用户的联系地址

$grid->column('Address', __('Contact'))->expand(function ($model) {
    $addresses = $model->addresses()->with(['province','city','district'])->get()->map(function ($address) {
        return [
            'name'=> $address->name,
            'mobile' => $address->mobile,
            'area' => $address->getRelation('province')->name.'-'.$address->getRelation('city')->name.'-'.$address->getRelation('district')->name,
            'address' => $address->address
        ];
    });
    return new Table([__('Contact Name'),__('Contact Phone'),__('Province Area District'),__('Contact Address')], $addresses->toArray());
});

Laravel-admin 一对多关系的详解

Detail 详情页面

以新的 grid 展示用户的联系地址列表

// hasMany关系,使用的是 Grid 实例
$show->addresses(__('ContactOfList'),function ($addresses){
    $addresses->resource('/admin/addresses');
    $addresses->name(__('Contact Name'));
    $addresses->mobile(__('Contact Phone'));
    $addresses->Area(__('Area'))->display(function (){
        return $this->province->name.'-'.$this->city->name.'-'.$this->district->name;
    });
    $addresses->address(__('Contact Address'));
});

Laravel-admin 一对多关系的详解

表 demo_addresses

idnamemobileprovince_idcity_iddistrict_idaddressuser_id
1田宝勇13075339085370000370100370102中铁财智中心1
public function user(){
   return $this->belongsTo(User::class, 'user_id', 'id');
}

Form

在地址添加页面,增加选择用户的选择框

// belongsTo 关系,使用的是 Show 实例
$show->user(__('AddressOnwer'),function ($user){
    $user->setResource('/admin/demo_users');
    $user->username(__('User name'));
    $user->email(__('Email'));
});

Laravel-admin 一对多关系的详解

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Stella981 Stella981
4年前
Jira 使用手册
<tablestyle"width:100%;margin:200px0300px0;"<tr<thDate</th<thRevisionversion</th<thDescription</th<thauthor</th</tr<tr<td20180614</td<tdV1.0.0</td
Stella981 Stella981
4年前
Go 语言编程 — gorm 的数据完整性约束
目录文章目录目录实体完整性(主键约束)用户定义完整性(非空约束、唯一约束、检查约束和默认值)参照完整性(外键约束)关联关系一对一、一对多关联多对多关联示例实体完整性(主键约束)每个关系(表)至少存在一个主
Stella981 Stella981
4年前
Django之ORM(多对多)
一、ManyToManyField1、classRelatedManager"关联管理器"是在一对多或者多对多的关联上下文中使用的管理器。它存在于下面两种情况:1.外键关系的反向查询2.多对多关联关系简单来说就是当 点后面的对象 可能存在多个的时
Stella981 Stella981
4年前
Hibernate利用关联关系操纵对象
Hibernate利用关联关系操纵对象数据对象之间关联关系有一对一、一对多及多对多关联关系。在数据库操作中,数据对象之间的关联关系使用JDBC处理很困难。本节讲解如何在Hibernate中处理这些对象之间的关联关系。本节使用到4个类,它们分别是Student(学生)、Card(学生证)、Group(班级)和Cou
Wesley13 Wesley13
4年前
Java 日期与时间
Java的日期Java没有内置的日期类,但可以导入java.time包,这个包中包含了许多类,可用于处理日期和时间。例如:<table<tbody<tr<thstyle"width:25%"Java类</th<thstyle"width:75%"描述</th</tr<tr<td<code
Wesley13 Wesley13
4年前
@OneToMany、@ManyToOne以及@ManyToMany讲解(五)
一、一对多(@OneToMany)1、单向一对多模型假设通过一个客户实体可以获得多个地址信息。对于一对多的实体关系而言,表结构有两种设计策略,分别是外键关联和表关联。(1)映射策略外键关联在数据库中表customer和表结构address定义,如下:createtablecustomer(
Wesley13 Wesley13
4年前
3 OneToMany ManyToMany MappedBy Cascade
1双向1N关联对于1N关联,Hibernate推荐使用双向关联,而且不要让1的一方控制关联关系,而使用多的一方控制关联关系。a.一的一方 表示班级@Entity@Table(name"team_1")publicclassTeam{@Id@Gen
Wesley13 Wesley13
4年前
ThinkPHP 根据关联数据查询 hasWhere 的使用实例
很多时候,模型关联后需要根据关联的模型做查询。场景:广告表(ad),广告类型表(ad\_type),现在需要筛选出广告类型表中id字段为1且广告表中status为1的列表先看关联的设置部分 publicfunctionadType(){return$thisbelongsTo('A
多态根系
多态根系
Lv1
晚来天欲雪,能饮一杯无?
文章
5
粉丝
0
获赞
0