关联模型
一对一: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 app\index\model; -
use think\Model; -
class Region extends Model{//全国地区表 -
//配送区域表格 -
public function shippingArea(){ -
//地区表------配送区域表 -
return $this->belongsToMany('ShippingArea','tp_area_region','shipping_area_id','region_id'); -
} -
} -
ShippingArea.php -
namespace app\index\model; -
use think\Model; -
class ShippingArea extends Model{ -
public function region(){ -
return $this->belongsToMany('Region','tp_area_region','region_id','shipping_area_id'); -
} -
} -
//在控制器中使用多对多关联模型 -
namespace app\index\controller; -
use think\Controller; -
use think\Db; -
use app\index\model\Users; -
use app\index\model\Region; -
use app\index\model\ShippingArea; -
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); -
} -
}
本文介绍了在PHP中使用ThinkPHP框架实现多对多关联模型的操作,包括查询、插入、删除和更新关联关系。通过Region和ShippingArea模型展示了如何定义并使用belongsToMany方法处理tp_region、tp_shipping_area和tp_area_region三张表之间的关联。示例代码详细演示了如何在控制器中执行这些操作。
2390

被折叠的 条评论
为什么被折叠?



