首先有两个表:Project(项目)和Schedule(进度)。
每个项目对应对个小进度(关联方式:一对多HAS_MANY和BELONGS_TO)。
表关联,要操作关联表,需要定义关联模型。要在项目表Project查寻进度数据,需要建立ProjectModel;反之要在进度表Schedule查询项目数据,就需要建立ScheduleModel。相互查询就需要两个都创建。
必要:1.关联方式:'mapping_type' 2.外键:'foreign_key'
注1:as_fields和mapping_fields,结果为设置在后面那个(覆盖)。
注2:HAS_MANY是一对多关联,所以添加数据也是得是添加数组(二维)。
注3:as_fields映射成数据对象中的某个字段:字符串拼接不能有空格
1、ProjectModel
继承于RelationModel,有多个关联HAS_MANY
<?php
namespace Api\Model;
use Think\Model\RelationModel;
class ProjectModel extends RelationModel{
protected $_link = array(
'Schedule' => array(
// 每个项目都开发多个平台进度(一对多关联 HAS_MANY和BELONGS_TO)
'mapping_type' =>self::HAS_MANY,
// 表的外键,关联和被关联表都一样
'foreign_key' => 'project_id',
// 关联要查询的字段
'mapping_fields' => 'id, name, project',
),
);
}
2、ProjectController
namespace,use都正常就好,报错就需要引用一下ProjectModel
1、要使用D方法
2、要注意一对多关联是二维数组
3、要使用relation()
创建项目的同时创建多条进度记录,主要方法:
public function add(){
/*一对多,每个项目分开发平台创建进度数据*/
// explode分割字符串(平台ID用英文逗号‘,’隔开)
$platforms = explode(',', I('platform'));
/*构造进度数据 使用关联表添加数据*/
$scheduleList = array();// 注意 因为是一对多关联,所以添加数据也是得是添加数组(二维)
foreach ($platforms as $key => $value) {
$scheduleList[] = array(
'name' => I('name'),
'platform' => $value,
);
}
/*创建项目数据对象*/
$data = array();
$data['name'] = I('name');
$data['status'] = 0;
$data['Schedule'] = $scheduleList;
/*实例化模型 关联需要用D方法,不能使用M方法*/
$Project = D('Project');
/*写入到数据库 relation add方法*/
$result = $Project->relation(true)->add($data);
if ($result) {
echo "成功";
}else{
echo "失败";
}
}
3、ScheduleModel
继承于RelationModel,归属于BELONGS_TO
<?php
namespace Api\Model;
use Think\Model\RelationModel;
class ScheduleModel extends RelationModel{
protected $_link = array(
'Project' => array(
// 每个项目都开发多个平台进度(一对多关联 HAS_MANY和BELONGS_TO)
'mapping_type' =>self:: BELONGS_TO,
// 表的外键,关联和被关联表都一样
'foreign_key' => 'project_id',
// 映射成数据对象中的某个字段:不能有空格
'as_fields' => 'status:projectStatus,name:projectName',
),
);
}
4、ScheduleController
namespace,use都正常就好,报错就需要引用一下ScheduleModel
1、要使用D方法
2、要使用relation()
获取进度记录,同时返回项目状态projectStatus和名称projectName,主要方法:
public function list(){
/*实例化模型 关联需要用D方法,不能使用M方法*/
$Database = D('Schedule');
$list = $Database->relation(true)->select();
dump($list);
}