发布于 5年前
Fastadmin app\common\controller\Backend这个基类的buildparams方法导致的表名未定义bug
当设置关联查询的时候
$name = \think\Loader::parseName(basename(str_replace('\', '/', get_class($this->model))));
这行代码并无法获取完整表名,假设我的表名有前缀,sql就报错了。
解决方案:
部分代码:
.
.
.
$this->model = new \app\admin\model\cms\Article;
.
.
.
$list = $this->model
->where($where)
->order($sort, $order)
->limit($offset, $limit)
->select();
.
.
.
这里会报: 未定义 article.id
问题出在 common/controller/Backend.php
中 $name = \think\Loader::parseName(basename(str_replace('\', '/', get_class($this->model))));
这句。 把表识别成了article
而不是 cms_article
。
再看这个代码
$list = $this->model
->with(['user'])
->where($where)
->order($sort, $order)
->limit($offset, $limit)
->select();
是不是不报错了?那是因为加了关联模型后,会自动把 cms_article
命名别名 article
。
那没有关联模型怎么办呢? 只需要如下即可:
$list = $this->model
->alias(\think\Loader::parseName(basename(str_replace('\\', '/', get_class($this->model)))))
->where($where)
->order($sort, $order)
->limit($offset, $limit)
->select();