代码如下(这是 thinkphp 写的):
return $this->alias('cus')
->join('admin a', 'cus.userID = a.id')
->field('cus.userID,a.cjName,count(*) AS count')
->when($month, function ($query) use ($month) {
$query->whereMonth('cjTime', $month);
},function ($query) {
$query->whereYear('cjTime', date('Y'));
})
->when($brand_id, function ($query) use ($brand_id) {
$query->where('cus.cjbrandID', $brand_id);
})
->when($shop_id, function ($query) use ($shop_id) {
$query->where('cus.cjMenDian', $shop_id);
})
->group('cus.userID')
->order('count desc')
->limit(10)
->select()->each(function ($item) {
// ....
return $item;
})->toArray();
1
westoy 2022-10-26 23:34:35 +08:00
封装进函数
看不见的就是优雅的 |
2
qinrui 2022-10-26 23:38:17 +08:00 via iPhone
我用 medoo 查数据库,配合 smarty 模版引擎
不会用 thinkphp 等框架 |
3
sarices 2022-10-26 23:49:16 +08:00
直接在 MySQL 中建视图
|
4
baobao1270 2022-10-27 06:19:44 +08:00
TP 已经比手写 SQL 好很多了
不爽上 ORM |
5
Rache1 2022-10-27 10:09:08 +08:00
添加 scope ,tp 里面叫搜索器,,把这些 when 操作放到里面去处理,后期改起来也方便一些,代码看上去就会简洁很多了。
如果使用 PHP 7.4 及以上,你的代码可以更加简单一些。 ->when($brand_id, fn ($query) => $query->where('cus.cjbrandID', $brand_id)) ->when($shop_id, fn ($query) => $query->where('cus.cjMenDian', $shop_id)) |
6
Rache1 2022-10-27 10:11:18 +08:00
另外,不要把所有东西都揉到一起,应该分开来出来。比如你后面的 each ,如果是我,就会单独弄一个方法去做。
|
7
8rmEHZ8WhVHVOb0E 2022-10-27 10:18:34 +08:00
scope+放弃全链接式调用
|
8
8rmEHZ8WhVHVOb0E 2022-10-27 10:24:07 +08:00
```
$query = $this->alias('cus')->join('admin a', 'cus.userID = a.id'); //条件 A $query->when($month, function ($query) use ($month) { $query->whereMonth('cjTime', $month); },function ($query) { $query->whereYear('cjTime', date('Y')); }); //条件 B $query->when($brand_id, function ($query) use ($brand_id) { $query->where('cus.cjbrandID', $brand_id); }); //条件 C $query->when($shop_id, function ($query) use ($shop_id) { $query->where('cus.cjMenDian', $shop_id); }); //条件可以封装 scope $query->onlyshop($shop_id); //执行查询 $models = $query->group('cus.userID') ->field('cus.userID,a.cjName,count(*) AS count') ->order('count desc') ->limit(10); //结果集处理 $models->each(function ($item) { // .... return $item; }); return $models; ``` |
9
tlerbao OP 感谢楼上各位,还有没有大神指教
|