laravel用到的备个份

本文深入探讨Laravel框架的高级使用技巧,包括SQL查询日志、表单数据更新、多条件查询、验证后手动填充及获取表字段等核心功能,旨在帮助开发者提升应用性能和代码质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,得到最新的sql

  1. DB::connection()->enableQueryLog();
  2. //这里为查询操作
  3. dump(DB::getQueryLog());
  4. 上面方法参数不能直接打印出来,可以定义一个全局函数,然后将上面的 dump(DB::getQueryLog()) 替换成
    dump(getRealSql(DB::connection()->getQueryLog()));
/**
 * 打印完整Sql
 */
if (! function_exists('getRealSql')) {
    /**
     * @param $message
     */
    function getRealSql($bindings)
    {
        $data = [];
        foreach ($bindings as $k=> $b){

            $bi  = $b['bindings'];

            $bi = array_map(function($a){
                return '\''.$a.'\'';
            },$bi);

            $sql = str_replace('?', '%s', $b['query']);
            $sql2 = sprintf($sql, ...$bi);

            $data[$k] = $sql2;
        }
        return $data;
    }
}

二,更新表单数据

因为含有_token

可以:

$data = request()->except(['_token']);
Model::where('id',$request->input('id'))->update($data);

也可以:

Model::find($request->input('id'))->update($request->all());

想要实现laravel多条件查询 嵌套查询:

SELECT
	`price` 
FROM
	`fedexprices` 
WHERE
	( `profile` = 'FEDEX101' AND `service` = 'SMART_POST' AND `weight` = '50.0' AND `zone` = '2' ) 
	AND ( `start_at` <= '2019-09-25' OR `start_at` IS NULL ) 
ORDER BY
	`start_at` DESC 
	LIMIT 1

 前面可以组装成

$where = array(
                ['profile', '=', 'p'],
                ['service', '=', 's'],
                ['weight', '=', $totalWeight],
                ['zone', '=', $realZone]
            );

需要嵌套的时候使用回调函数,回调函数相当于加个小括号在外面 

$hasStartAt = Model::where($where)->where(function ($query) {
            $query->where('start_at', '<=', date('Y-m-d'))
                ->orWhere('start_at', null);
        })->select($select)->orderByDesc('start_at')->first();

##查询另外的表的子查询举例
User::whereIn('id', function($query){ 
    $query->select('user_id') 
    ->from('admin_user') 
    ->whereIn('type', ['1', '2']); 
})->get();

参考:laravel多条件查询(and,or嵌套查询)_exponent的博客-CSDN博客 

三,在验证后手动填值:

一般表单验证后会自动存之前的数据,也可以手动更改,使用withInput,

return redirect()-> back()->withInput(['error'=>'注册失败,短信验证码不正确','page'=>'phone']);

页面也可以用old展示 

<input type="text" name="username" value="{{ old('error') }}">

四, 得到某个表格的所有字段:

Schema::getColumnListing('xxxxs');
Schema的命名空间: Illuminate\Support\Facades\Schema

 五, laravel6版本以后报错: Call to undefined function array_except():

        可以尝试下面代码: 参考链接

php - Lumen/Laravel 6: Call to undefined function array_except() - Stack Overflow

composer dump-autoload
php artisan view:clear

六, 要是队列不执行, 发现到了Event, 但是没到Listeners

php artisan event:cache
#或者
php artisan clear

如果你按照官方手册上的配置:

* * * * * php /path/to/artisan schedule:run 1>> /dev/null 2>&1

发现任务没有按照预期的执行,可能是你环境变量问题,
按照下面的修改你的Cron任务配置即可;

* * * * * cd /path/to && /usr/local/bin/php artisan schedule:run >> /dev/null 2>&1

其中 /usr/local/bin/php 是你PHP的绝对路径。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值