Вы не можете сериализовать или десериализовать экземпляры PDO в laravel - PullRequest
0 голосов
/ 01 февраля 2019

Я использую систему событий laravel по умолчанию, например, такую:

use \Illuminate\Database\Connection;

class ExampleService {

private $connection;

    public function __construct(Connection $connection)
    {
        $this->connection = $connection;
    }
}

class ExampleEvent {

    private $service;

    public function __construc(ExampleService $service) {
        $this->service = $service;
    }
}


class ExampleListener implements ShouldQueue {

    public function handle(ExampleEvent $event) {

    }
}

Это мой пользовательский сервис, где я использую соединение вместо eloquent, и всякий раз, когда я делаю инъекцию, я разрешаю свой сервис от события к слушателю и включаю его.очередь я получаю сообщение об ошибке You cannot serialize or unserialize PDO instances.Я хочу, чтобы мой слушатель работал с implements ShouldQeueue, а не создавал другую работу и отправлял от одного и того же слушателя

1 Ответ

0 голосов
/ 01 февраля 2019

Добавление элементов в очередь сериализует их.

Соединение содержит экземпляр PDO, но вы не можете сериализовать экземпляр PDO, поэтому вы получите эту ошибку.

Вы должны реализовать __ sleep и __wakeup методы для проверки правильности сериализации, например:

class ExampleService {

    private $connection;

    public function __construct(Connection $connection)
    {
        $this->connection = $connection;

    }

    public function __sleep() {
         return []; //Pass the names of the variables that should be serialised here
    }
    public function __wakeup() {
         //Since we can't serialize the connection we need to re-open it when we unserialise
         $this->connection = app()->make(Connection::class); 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...