表 demo_users , demo_addresses,他們的關係爲:一個用戶有多個收貨地址。一個收貨地址,只能關聯到一個用戶。php
id | username | password | |
---|---|---|---|
1 | tom | 123456 | tom123@qq.com |
public function address(){ return $this->hasMany(Address::class, 'user_id', 'id'); }
在用戶表中展現地址信息。由於用戶和地址是一對多的關係,因此,展現地址信息的時候,須要採用列展開或者模態框展現。注意,默認地址信息中不包含省市區的名稱信息,須要經過With得到省市區的信息。this
在 用戶表格頁面,經過擴展列,展現用戶的聯繫地址spa
$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()); });
以新的 grid 展現用戶的聯繫地址列表code
// 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')); });
id | name | mobile | province_id | city_id | district_id | address | user_id |
---|---|---|---|---|---|---|---|
1 | 田寶勇 | 13075339085 | 370000 | 370100 | 370102 | 中鐵財智中心 | 1 |
public function user(){ return $this->belongsTo(User::class, 'user_id', 'id'); }
在地址添加頁面,增長選擇用戶的選擇框orm
// belongsTo 關係,使用的是 Show 實例 $show->user(__('AddressOnwer'),function ($user){ $user->setResource('/admin/demo_users'); $user->username(__('User name')); $user->email(__('Email')); });