fastadmin 多表联查常见问题 Integrity constraint violation: 1052 Column 'createtime' in where clause is

controller 中的 一定要用

$this->model =  new 模型;  标准格式也是唯一的格式

否则前端字段查询 会报 Integrity constraint violation: 1052 Column 'createtime' in where clause is  之类的错误,

list($where, $sort, $order, $offset, $limit) = $this->buildparams();

$where 会对当前模型的表的字段做处理,

详见代码 /application/common/controller/Backend.php 中275行和302行

if (!empty($this->model)) {
    $name = \think\Loader::parseName(basename(str_replace('\\', '/', get_class($this->model))));
    $name = $this->model->getTable();
    $tableName = $name . '.';
}
    if (stripos($k, ".") === false) {
        $k = $tableName . $k;
    }
buildparams()方法会获取当前模型的表名

在302行 判断要查询的字段前有没有表名,如果没表名会追加当前表名

在js中,要显示的关联表字段要加表名

{field: 'order_num', title: '订单号'},
{field: 'user.user_name', title: '姓名'},

没有加表名的会自动加上当前模型的表名

 controller 标准格式

        $this->model = new \app\admin\model\Order();
        // 这里一定要用$this->model  否则前端查询时会报错
        //设置过滤方法
        $this->request->filter(['strip_tags', 'trim']);
        if ($this->request->isAjax()){
            list($where, $sort, $order, $offset, $limit) = $this->buildparams();
            $total = $this->model
                ->where('order.status','=',2)
                ->with('user')
                ->where('unit_id',$this->unit_id)
                ->where($where)
                ->order($sort, $order)
                ->count();
            $list = $this->model
                ->with('user')
                ->where('order.status','=',2)
                ->where('unit_id',$this->unit_id)
                ->where($where)
                ->order($sort, $order)
                ->limit($offset, $limit)
                ->select();


            $list = collection($list)->toArray();
            $result = array("total" => $total, "rows" => $list);

            return json($result);
        }

with关联中的user  在 Order model 中添加

<?php

namespace app\admin\model;

use think\Model;


class Order extends Model
{
    public function user(){
        return $this->belongsTo('User', 'user_id', 'id', [], 'LEFT')->setEagerlyType(0);
    }
}
?>

在前端JS 中 使用方法,

zdxx: function () {
                var table_zdxx = $("#table_zdxx");
                table_zdxx.bootstrapTable({
                    url: $.fn.bootstrapTable.defaults.extend.zdxx_index,
                    extend:{
                    },
                    toolbar: '#toolbar_zdxx',
                    sortName: 'id',
                    pagination: true,
                    commonSearch: true,
                    search: true,
                    columns: [
                        [
                            {field: 'state', checkbox: true, },
                            {field: 'id', title: 'ID'},
                            {field: 'order_num', title: '订单号'},
                            {field: 'user.user_name', title: '姓名'},
                            {field: 'num', title: '购买数量'},
                            {field: 'money', title: '金额'},
                            {field: 'isinvoice', title: '是否开票',formatter:function (value) {
                                    if(value==0)
                                        return '未开票';
                                    else if(value==1)
                                        return '已开票';
                                },
                                searchList: {"0": '未开票', "1": '已开票'},},
                            {field: 'createtime', title: '申请时间',formatter: Table.api.formatter.datetime, operate: 'RANGE', addclass: 'datetimerange',},


                        ]
                    ]
                });
                // 为表格1绑定事件
                Table.api.bindevent(table_nbry);
            },

猜你喜欢

转载自blog.csdn.net/lows_H/article/details/105686393
今日推荐