共计 2549 个字符,预计需要花费 7 分钟才能阅读完成。
昨天想在 Layui 的数据表格添加一列与 ID 对应的统计数据,折腾了几个小时,这里做一下记录。
一、多模型 Haswhere
最开始我的需求是联查三个表,但是看了 TP 文档,Hasone只能有一个 Haswhere,但是可以有多个 with。
也就是可以展示多个绑定的数据,但是有且只能查询其中的两个,其他的不在查询条件内。
后来没办法只有用 join 来连表实现,代码如下:
PHP
1
2
3
4
5
6
|
$list = appindexmodelExpense::alias(“a”)
->join(‘Beian b’, ‘a.beian_id = b.id’)
->join(‘Customer c’, ‘a.customer_id = c.id’)
// ->join(‘expense_in d’, ‘a.id = d.expense_id’,’LEFT’)
->field(‘a.id,a.expense_state,b.project_name,b.record_date,c.linkman,c.phone’)
->where($where)->order(‘id desc’)->limit($limits)->select();
|
其中注释掉的这行,本来是想拿来做统计,也就是在 field 中写 SUM 进行统计。
实际上不行,因为 join 后,无论 LEFT 还是 RIGHT,都会对最终的数据有影响,这其实也很好想明白。
所以,想在数据接口直接输出统计值,似乎很难,折腾了一会后,放弃了这个尝试。
二、AJAX return 返回
数据接口中没有统计数据,我们就需要另外定义模板,也就是在设置 LayUI 数据表格时,增加 templet,如下:
1
2
3
4
5
6
7
|
{
field: ‘id’,
title: ‘ 结余 ’,
align: ‘center’,
templet: sumTpl,
sort: true
}
|
其中的 templet: sumTpl,就是我们定义的模板。
注意,定义模板的方法请参考 LayUI 文档,我是一次成功,所以不清楚失败的情况,但是听说自定义模板位置错误的话,是没有输出的。
我放的位置是 LayUI 定义主入口模块的下方,数据表格的上方,也就是:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<script>
layui.config({
base: ‘/static/’ // 静态资源所在路径
}).extend({
index: ‘lib/index’ // 主入口模块
}).use([‘index’, ‘table’], function () {
var $ = layui.$,
admin = layui.admin,
element = layui.element,
layer = layui.layer,
table = layui.table;
element.render();
// 统计
var sumTpl = function(c) {
$.ajax({
url: ‘/index/expense/sum_api/’,
type: ‘post’,
dataType: ‘json’,
data: {
id: c.id
},
success: function (data) {
result = data.sum
}
});
};
|
最初我是用上面的方式表达,直接 AJAX 请求,请求的参数是所在行的 id 值,返回后 return。
事实上这事错误的,在 ajax 方法中不能直接 return 返回值。
常见的错误写法
* 方式:(1)同步调用(2)在 ajax 函数中 return 值;
* 结果:返回 1。未成功获取返回值;
* 失败
正文完