public static function getPageList(array $params = array(), int $page = 1, int $limit = 10)
{
$where = self::getWhere($params);
$model = new HolidayBenefitExclusionModel();
// $model = $model->alias('HolidayBenefitExclusionModel'); +++++++
$query = HolidayBenefitExclusionModel::buildWith($model, $params);
$query = $query->where($where);
return $query->order('id', 'desc')
->paginate(array(
'list_rows' => $limit,
'page' => $page,
))
->toArray();
}
/**
* 构建Query的With关联
* @author: LiSongKun
* @date: 2025/9/11 14:23
* @param $query
* @param array $params
* @return mixed
*/
public static function buildWith($query, array $params)
{
return $query->with([
'user' => function ($innerQuery)
{
$innerQuery->field('oa,name');
}
])->hasWhere('user', function ($innerQuery) use ($params)
{
$innerQuery->where(1, 1);
$innerQuery->field('oa,name');
if (isset($params['name_like']) && $params['name_like'] !== '')
{
$innerQuery->where('name', 'like', '%' . $params['name_like'] . '%');
}
});
}在使用模型查询同时调用 with 和 hasWhere 时候会遇到 :
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'HolidayBenefitExclusionModel.oa' in 'on clause'" 问题
需要加一个别名:alias('HolidayBenefitExclusionModel')
通过如下的方式可以在不执行语句的时候获取预执行的SQL输出。
<?php
$list = Vod::order('vod_addtime desc')
->where($where)
->fetchSql(true) // true 代表不执行语句
->select();
dump($list);exit;
?>
评论 (0)