thinkphp5 表fa_bill的字段 bill_type 根据值 自定义排序
时间: 2024-10-23 18:07:30 浏览: 18
ThinkPHP 5 的框架允许你在 SQL 查询中使用自定义排序,对于 `fa_bill` 表的 `bill_type` 字段,如果你想按照其值进行自定义排序,可以这样做:
首先,在模型层 (Model) 中,你可以定义一个查询方法,比如 `orderBillType()`,并传递一个数组给排序条件:
```php
public function orderBillType($typeArray = [])
{
$field = 'bill_type'; // 排序字段
if (!empty($typeArray)) {
// 检查传入的排序规则是否合法
foreach ($typeArray as $key => $value) {
if (!is_numeric($value) || $value <= 0) {
throw new Exception("Sort value must be a positive number for '$field'.");
}
}
// 使用关联数组表示升序、降序
$sortOrders = [];
foreach ($typeArray as $value) {
$sortOrders[$field][$value] = SORT_ASC; // 如果值越大越靠前,设置为ASC
}
// 构造排序条件
$sql = "ORDER BY " . implode(',', array_keys($sortOrders)) . " " . implode(',', array_values($sortOrders));
} else {
$sql = "ORDER BY $field"; // 默认按照升序排序
}
return $this->alias('tb') // 如果你的表别名是'tb'
->select()
->from('fa_bill')
->where('tb.bill_type IN (?)', array_keys($typeArray))
->order($sql);
}
```
然后,当你需要按自定义规则排序时,只需调用这个方法,并传入一个键值对数组,例如:
```php
$customTypes = [1 => 'asc', 3 => 'desc']; // 升序1,降序3
$orderedList = $modelInstance->orderBillType($customTypes);
```
这里假设 `'asc'` 对应于升序,`'desc'` 对应于降序。
阅读全文