问题背景:使用的是thinkPHP5.0框架下封装的的链式操作方式。
问题描述:接口要求,在传入参数后,首先检查class中是否存在相关班级,如果存在则在stu_class表中插入一条申请信息,如果不存在就不插入,并返回插入成功与否的有关信息。
数据库字段:
stu_class
class:
思路过程:
(1)对于检查数据是否存在,我另外写了一个相关的查询使用读入的参数,在表格中搜索,并统计数量,因为class表项中不存在重复的数据,所以count只会返回0(表示没有数据),1表示这个数据是存在的,然后写了一个判断语句,之后在表中有相关数据时,才会插入数据
(2)需求要求返回插入是否成功的有关信息,因为这个stu_class表也是不允许重复插入,所以有时会插入失败,在面对这个问题的时候,我首先希望使用mysql自带的返回值来解决这个问题,因为在插入的时候会返回一个变动的条目信息,这里这个接口调用一次之后插入一次信息,如果插入成功应该就会返回1,插入失败就应该返回0,但是实际操作中出现了一个问题,就是在插入失败之后thinkPHP会直接报错,并不会返回0。于是我就想着使用try catch捕捉这条错误的信息,但是失败了,后来查阅官方文档我发现原来是因为在thinkPHP中catch中应该是\Exception $e,而不是Exception $e,正是这点差异使得我反复调试失败,修改过来之后,代码就跑通了。
代码实现:
public function handle($stuid='',$claid='')
{
$data0 = Db::table('class')
->where('id',$claid)
->count();
if($data0){
try {
$data1 = ['stuid' => $stuid, 'claid' => $claid,'state'=>'0'];
$request=Db::table('stu_class')->insert($data1);
//$request = Db::name('cen_class')->getLastInsID();
return 1;
} catch (\Exception $e) {
return 0;
}
}else{
return 2;
}
}
代码解释:class表中无相关数据时,会返回2;插入失败会返回0,插入成功会返回1。