Задать вопрос
@maksim_fix
Junior PHP developer

Почему нельзя работать внутри соединения Ratchet?

использую библиотеку Ratchet. Все работает отлично, но при попытке работы в методах onMessage, onOpen, например, я хочу добавлять запись в БД при подключении пользователя, пишу в методе:
public function onOpen(ConnectionInterface $conn)
    {
        // Store the new connection to send messages to later
        $this->clients->attach($conn);
        echo "New connection! ({$conn->resourceId})\n";
        $client = new Client();
        $client->client_id = $conn->resourceId;
        $client->save();
    }

На что получаю ошибку PHP Fatal error: Uncaught Error: Call to a member function connection() on null in /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1283
При попытке работать с БД в других методах та же ошибка
  • Вопрос задан
  • 144 просмотра
Подписаться 1 Простой 2 комментария
Решения вопроса 2
Sanasol
@Sanasol Куратор тега Laravel
нельзя просто так взять и загуглить ошибку
Так а сервер-то запускается в контексте ларавела или отдельно php rachet.php какой-нибудь?

Если второй, то очевидно он не запускает всё что в ларавеле должно быть.
Ответ написан
@maksim_fix Автор вопроса
Junior PHP developer
Как сказал Александр Аксентьев, я запустил файл отдельно от Laravel, чтобы исправить нужно написать следующее:
use Illuminate\Database\Capsule\Manager as Capsule;

$capsule = new Capsule;
$capsule->addConnection([
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => 'project',
    'username'  => 'root',
    'password'  => '',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
]);

// Set the event dispatcher used by Eloquent models... (optional)
use Illuminate\Events\Dispatcher;
use Illuminate\Container\Container;

$capsule->setEventDispatcher(new Dispatcher(new Container));

// Make this Capsule instance available globally via static methods... (optional)
$capsule->setAsGlobal();

// Setup the Eloquent ORM... (optional; unless you've used setEventDispatcher())
$capsule->bootEloquent();

Я написал это в конструкторе моей модели и все заработало
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
erniesto77
@erniesto77
oop, rb, py, php, js
расскомментируй

// $app->withFacades();
// $app->withEloquent();

в файле bootstrap/app.php
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы