概述
用Thinkphp5.1
开发项目时,Model
层用了tp
封装的Db
类,因为不想每个方法都写db::name("manage_tag");
,于是我在构造 __construct
内赋值给了变量db;
在我执行更新时,我会先去调用isRepeat()
判断内容是否重复,于是就出现了下面的问题,
问题
更新时,where
条件多出name="xxxx"
;
public $db;
public function __construct()
{
$this->db = Db::name('manage_tag');
}
public function editTag(int $id,String $name)
{
$result = $this->db->where('id', $id)->fetChSql()->update(['name' => $name]);
var_dump($result);
return $result ? true : false;
}
public function isRepeat(String $name)
{
$result = $this->db->where('name',$name)->find();
return $result ? true : false;
}
使用fetChSql()
方法查看打印sql
UPDATE `yh_manage_tag` `name` = '标签11321' , `update_time` = 1621046891 WHERE `name` = '标签11321' AND `id` = 1
解决
查阅Thinkphp5.1
的文档,
查询对象在查询之后仍然会保留链式操作的值,除非你调用removeOption
方法清空链式操作的值。
在调用单独的查询方法时,使用removeOption();清除之前操作保留的值
public function isRepeat(String $name)
{
$result = $this->db->where('name',$name)->find();
$this->db->removeOption(true);
return $result ? true : false;
}
再次打印更新sql
出来
UPDATE `yh_manage_tag` SET `name` = '标签11321' , `update_time` = 1621047382 WHERE `id` = 1