ThinkPHP5数据库模型新增数据后获取自增ID的一个注意事项

ThinkPHP版本:5.0.19

踩过的一个小坑,直接上代码(oid为数据表主键ID):

1
2
3
4
5
6
7
8
$post   = $this->request->post();
$model = new TopicModel;
$result = $model
->data($post)
->allowField(['title', 'content'])
->save();

var_dump($model->oid); // false

如上代码,按照官方文档的说明,最后一行返回的结果应该是自增ID,结果却返回了一个string 'false'

想了很久也没想明白问题出在哪里,好在死缠烂打的仔仔细细找了半天终于发现了问题原因,出在POST提交的数据上面。

因为POST提交的数据包含了oid字段,而我是直接用POST数据,然后指定允许写入字段的方法。

虽然只有指定字段能够写入数据库,但其他数据依旧会被写到模型类里面,导致模型里面包含oid字段,之后->save()新增数据判断到主键有数据就不会覆盖了。

找到问题之后就很容易解决了,将$post['oid']删除就行:

1
2
3
4
5
6
7
8
9
10
$post        = $this->request->post();
// unset($post['oid']);
$post['oid'] = 0; // 或者使用unset都可以
$model = new TopicModel;
$result = $model
->data($post)
->allowField(['title', 'content'])
->save();

var_dump($model->oid); // 135