发布于 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();
©2020 edoou.com   京ICP备16001874号-3