在laravel中,使用DB查询数据库后,如果在 get() 后直接使用 toArray() 返回的数据是 php 标准的 stdClass

$goods = DB::connection('system')
        ->table('group_buy_goods')
        ->get(['id', 'name', 'sold_price']);
dd($goods->toArray());

2022-04-19T03:51:27.png

如果想把对象改为数组可以使用 map 方法修改数据格式

$goods = Db::connection('system')
        ->table('group_buy_goods')
        ->get(['id', 'name', 'sold_price'])
        ->map(function ($value) {
            return (array)$value;
        });
dd($goods->toArray());

2022-04-19T03:54:35.png

使用 Eloquent 模型查询的数据是数组
GroupBuyGoods::query()->get()->toArray()

感兴趣的可以试下

连表执行更新数据时报错 1292 - Truncated incorrect DOUBLE value: 'admin'

UPDATE report_for_repair r
LEFT JOIN users u ON r.user_id = u.username 
SET r.user_id = u.id 
WHERE
    r.id >= 2950 
    AND u.id IS NOT NULL;

经查询发现是 users 表的 username 字段包含字母,需要把 users 表的带字母的全部排除掉,再进行连表查询

UPDATE report_for_repair r
LEFT JOIN users u ON r.user_id = u.username 
SET r.user_id = u.id 
WHERE
    r.id >= 2950 
--     u.username 全部为数字,可以使用正则表达式
    AND u.username regexp '^[0-9]+$'
    AND u.id IS NOT NULL;

使用 easywechat 拓展包模拟用户登陆的时候出现无法模拟的情况,经过反复测试发现以下问题:

Laravel 方法最后才会写入session
die 停止了后面的代码,(写入 session 等)

别用 exit,dd 等函数停止,使用return, 让后续代码执行。

Session::save() 执行写入 session

如下代码会使 easywechat 的默认中间件 'wechat.oauth' => \Overtrue\LaravelWeChat\Middleware\OAuthAuthenticate::class, 无法正确获取 session 信息
public function mock()
    {
        if (app()->environment() === 'local') {

            $sessionKey = 'wechat.oauth_user.default';
            $user = new User([
                "id"       => "oaa2vs-HAjs0s4_yUWQai0P0pvZk",
                "name"     => "NULL",
                "nickname" => "NULL",
                "avatar"   => "https://thirdwx.qlogo.cn/mmopen/vi_32/n8QhTK8Q0dAOsWy0CS66PJ8yLcRUZ7UctHEYzTDet74ibPeeqD7f2QhXXDh5zL7INZaZy8ZMXbicwYHiaibOewHYXw/132",
                "email"    => null
            ]);
            session([$sessionKey => $user]);

            dd($user);
        }
        dd('当前环境无法模拟');
    }

将上述代码中的 dd 改为 return 即可正常获取会话数据

public function mock()
    {
        if (app()->environment() === 'local') {

            $sessionKey = 'wechat.oauth_user.default';
            $user = new User([
                "id"       => "oaa2vs-HAjs0s4_yUWQai0P0pvZk",
                "name"     => "NULL",
                "nickname" => "NULL",
                "avatar"   => "https://thirdwx.qlogo.cn/mmopen/vi_32/n8QhTK8Q0dAOsWy0CS66PJ8yLcRUZ7UctHEYzTDet74ibPeeqD7f2QhXXDh5zL7INZaZy8ZMXbicwYHiaibOewHYXw/132",
                "email"    => null
            ]);
            session([$sessionKey => $user]);

            return($user);
        }
        return('当前环境无法模拟');
    }

查看composer当前版本

composer -v

要回滚到composer版本1,只需执行以下命令

composer self-update --1

当您想回到版本2时(在更新或删除不兼容的插件之后,您应该这样做)

composer self-update --2

切换到指定版本

composer self-update 2.0.14