调用博主最近登录时间
生活中的HYGGE
PHP THINKPHP6 预打印SQL
PHP

PHP THINKPHP6 预打印SQL

hygge
2025-09-27 / 0 评论 / 4 阅读 / 正在检测是否收录... / 总字数:1890,阅读时长:6.3分钟
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'] . '%');
                     }
                 });
}

在使用模型查询同时调用 withhasWhere 时候会遇到 :

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

评论 (0)

取消