关联模型
一对一:HAS_ONE 以及对应的BELONEGS_TO
一对多:HAS_MANY 以及相对的BELONGS_TO
多对多:BELONGS_TO_MANY
步骤:
第一:创建Users模型
第二:创建Comment模型
第三:在Users模型添加方法
第四:在comment模型添加方法
第五:测试
多对多关联表
truncate table tp_shipping_area
truncate table tp_area_region
select * from tp_shipping_area
select * from tp_area_region
1.清空tp_shipping_area表和tp_area_region表进行测试
2.创建Region模型和ShippingArea模型
3.设置Region模型的关联方法指定关联表
4.设置ShippingArea模型的关联方法指定关联表
三张表 tp_region(地区表) tp_shipping_area(配送区域表) tp_area_region(配送区域和地区关联表) 枢纽表
- Region.php
- namespace appindexmodel;
- use thinkModel;
- class Region extends Model{//全国地区表
- //配送区域表格
- public function shippingArea(){
- //地区表------配送区域表
- return $this->belongsToMany('ShippingArea','tp_area_region','shipping_area_id','region_id');
- }
- }
- ShippingArea.php
- namespace appindexmodel;
- use thinkModel;
- class ShippingArea extends Model{
- public function region(){
- return $this->belongsToMany('Region','tp_area_region','region_id','shipping_area_id');
- }
- }
- //在控制器中使用多对多关联模型
- namespace appindexcontroller;
- use thinkController;
- use thinkDb;
- use appindexmodelUsers;
- use appindexmodelRegion;
- use appindexmodelShippingArea;
- class Index extends Controller{
- //查询
- public function select(){
- $regon=Region::get(28558);
- echo $region->shippingArea[0]->shipping_area_name.'===<br/>';
- echo $region->shippingArea[1]->shipping_area_name.'===';
- //select tp_shippingArea.*,pivot.shipping_area_idaspivot_shipping_area_id,pivot.region_id AS pivot_region_id from tp_shipping_area Inner join tp_area_region pivot onpivot.shipping_area_id=tp_shipping_area.shipping_area_id where pivot.region_id=28558
- }
- //更新
- public function update(){
- }
- //删除
- public function del1(){
- $region=Region::getByName('北京市');
- $shippingArea=ShippingArea::get(2);
- $region->shippingArea()->detach($shippingArea); 删除关联关系
- //delete from tp_area_region where region_id=1 and shipping_are_id=2
- }
- public function del2(){
- $region=Region::getByName('北京市');
- $shippingArea=ShippingArea::get(3);
- $region->shippingArea()->detach($shippingArea,true);
- return '配送区域删除成功';
- //delete from tp_area_region where region_id=1 and shipping_area_id=3
- //delete from tp_shippingArea where shipping_area_id=3;
- }
- //插入
- public function insert(){
- $region=Region::getByName('北京市');
- $region->shippingArea()->save(['shipping_area_name'='中国首都']);
- //select * from tp_region where name='北京市' limit 1
- //insert into tp_shipping_area(shipping_area_name) values('中国首都');
- //insert into tp_area_region('regin_id','shipping_area_id') values(1,'1');
- }
- public function saveAll(){
- $regin=Region::get(28558);
- $regin->shippingArea()->saveAll([
- ['shipping_area_name'=>'珠三角'],
- ['shipping_area_name'=>'全国一线城市']
- ])
- return '配送区域新增成功';
- }
- //把没有关联关系的数据插入到中间表中,形成关联关系
- public function relation(){
- $region=Region::get(28241);
- $shippingArea=ShippingArea::getByShippingAreaName('珠三角');
- $region->shippingArea()->attach($shippingArea);
- return '配送区域新增成功';
- }
- public function relation2(){
- $region=Region:get(28241);
- $region->shippingArea()->attache(2);
- return '配送区域新增成功';
- //insert into tp_area_region('region_id',shipping_area_id) values(28241,2);
- }
- }