当前位置: 首页 > 后端技术 > PHP

Laravel-admin一对多关系详解

时间:2023-03-29 14:27:59 PHP

一对多关联表demo_users,demo_addresses,它们的关系是:一个用户有多个收货地址。一个送货地址只能与一个用户相关联。表demo_usersidusernamepasswordemail1tom123456tom123@qq.comModelUser.phppublicfunctionaddress(){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];});returnnewTable([__('联系人姓名'),__('联系电话'),__('省区地区'),__('联系地址')],$addresses->toArray());});Detail详情页在一个新的grid中显示用户的联系地址列表//hasMany关系,使用的是一个Grid实例$show->addresses(__('ContactOfList'),function($addresses){$addresses->resource('/admin/addresses');$addresses->name(__('ContactName'));$addresses->mobile(__('ContactPhone'));$addresses->Area(__('Area'))->display(function(){return$this->province->name.'-'.$this->city->name.'-'.$this->地区->名称;});$addresses->address(__('联系地址'));});表demo_addressesidnamemobileprovince_idcity_iddistrict_idaddressuser_id1TianBaoyong13075339085370000370100370102中铁财智中心1publicfunctionuserong(){re>::class,'user_id','id');}Form中添加一个页面地址,添加一个选择框来选择用户//belongsTo关系,使用Show实例$show->user(__('AddressOnwer'),function($user){$user->setResource('/admin/demo_users');$user->用户名(__('用户名'));$user->email(__('Email'));});