mpyw/laravel-pdo-emulation-control

临时启用/禁用 PDO 预处理语句仿真

v2.0.5 2023-03-15 01:55 UTC

This package is auto-updated.

Last update: 2024-09-21 19:30:32 UTC


README

临时启用/禁用 PDO 预处理语句仿真。

要求

安装

composer require mpyw/laravel-pdo-emulation-control

基本用法

重要

默认实现由 ConnectionServiceProvider 提供,但是,包发现不可用。请注意,您必须自己将其注册到 config/app.php 中。

<?php

return [

    /* ... */

    'providers' => [
        /* ... */

        Mpyw\LaravelPdoEmulationControl\ConnectionServiceProvider::class,

        /* ... */
    ],

];
<?php

use Illuminate\Support\Facades\DB;

// Temporarily enable PDO prepared statement emulation.
DB::emulated(function () {
    // Your code goes here
});

// Temporarily disable PDO prepared statement emulation.
// (Only if you've already configured your connection by options [PDO::ATTR_EMULATE_PREPARES => true])
DB::native(function () {
    // Your code goes here    
});

重要

请注意,即使这些方法直接接触 PDO 实例,DB::getPdo()DB::getReadPdo() 也可能不会总是被调用。**连接尽可能延迟解决**。PDO::setAttribute() 仅在创建 PDO 实例并真正建立数据库的套接字连接后才会调用。

高级用法

提示

您可以通过自己使用 ControlsEmulation 特性来扩展连接类。

<?php

namespace App\Providers;

use App\Database\MySqlConnection;
use Illuminate\Database\Connection;
use Illuminate\Support\ServiceProvider;

class DatabaseServiceProvider extends ServiceProvider
{
    public function register(): void
    {
        Connection::resolverFor('mysql', function (...$parameters) {
            return new MySqlConnection(...$parameters);
        });
    }
}
<?php

namespace App\Database;

use Illuminate\Database\Connection as BaseMySqlConnection;
use Mpyw\LaravelPdoEmulationControl\ControlsEmulation;

class MySqlConnection extends BaseMySqlConnection
{
    use ControlsEmulation;
}