@SherbakovFirst

Почему я могу выполнить миграцию, но не могу сохранить пользователя с тем же конфигом?

Всем привет.
В спешке изучаю Yii2, MySQL, Docker и вообще Backend. Знаю что так лучше не делать, обещаю так не делать)) Столкнулся с такой проблемой.

Сделал конфиг - db.php. Написал файл миграции. Миграция выполняется успешно. Появляется новая таблица. Но как выполняю метод save из ActiveRecord, то подключение к базе данных не получается. В чём проблема

Сам Котроллер SiteController.php

namespace app\controllers;
use Yii;
use app\models\SignupForm;
use app\models\User;
use yii\web\Controller;

public function actionSignup(){
        
        if (!Yii::$app->user->isGuest) {
            return $this->goHome();
        }
        
        $model = new SignupForm();
        if($model->load(\Yii::$app->request->post())){
            $user = new User();
            $user->username = $model->username;
            $user->password = \Yii::$app->security->generatePasswordHash($model->password);
            if($user->save()){
                return $this->goHome();
            }
        }
     
        return $this->render('signup', ['model' => $model ]);
    }


Модель SignupForm.php

namespace app\models;
use yii\base\Model;

class SignupForm extends Model{
    public $username;
    public $password;
    
    public function rules() {
        return [
            [['username', 'password'], 'required', 'message' => 'Заполните поле'],
        ];
    }
    
    public function attributeLabels() {
        return [
            'username' => 'Логин',
            'password' => 'Пароль',
        ];
    }
    
}

Миграция
use yii\db\Migration;

class m230916_135018_create_user_table extends Migration
{
    public function safeUp()
    {
        $this->createTable('{{%users}}', [
            'id' => $this->primaryKey(),
            'username' => $this->string(256),
            'role'=>$this->string(256)->defaultValue('user'),
            'password'=>$this->string(256),
        ]);
    }
    
    public function safeDown()
    {
        $this->dropTable('{{%user}}');
    }
}

Ошибка

Database Exception – yii\db\Exception
SQLSTATE[HY000] [2002] No such file or directory
Error Info: Array
(
    [0] => HY000
    [1] => 2002
    [2] => No such file or directory
)
↵
Caused by: PDOException
SQLSTATE[HY000] [2002] No such file or directory
in /app/vendor/yiisoft/yii2/db/Connection.php at line 722


На всякий случай Docker

version: '3.9'

networks:
  bridge:
    driver: bridge

services:
  php:
    image: yiisoftware/yii2-php:8.1-apache
    networks:
      - bridge
    links:
      - mysql
    volumes:
      - ~/.composer-docker/cache:/root/.composer/cache:delegated
      - ./:/app:delegated
    ports:
      - '8000:80'
    environment:
      - TZ=Europe/Moscow
      - MYSQL_ROOT_PASSWORD=*Тут пароль1*
      - MYSQL_DATABASE=*Тут bd1*
      - MYSQL_USER=*Тут имя*
      - MYSQL_PASSWORD=*Тут пароль2*
    depends_on:
      - mysql

  mysql:
    image: mysql:8.0
    networks:
      - bridge
    ports:
      - "3306:3306"
    environment:
      - TZ=Europe/Moscow
      - MYSQL_ROOT_PASSWORD=*Тут пароль1*
      - MYSQL_DATABASE=*Тут bd1*
      - MYSQL_USER=*Тут имя*
      - MYSQL_PASSWORD=*Тут пароль2*

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    networks:
      - bridge
    restart: always
    ports:
      - 8080:80
    volumes:
      - ./db:/var/lib/mysql
    environment:
      - PMA_HOST=mysql
      - MYSQL_ROOT_PASSWORD=*Тут пароль1*
      - MYSQL_USER=*Тут имя*
      - MYSQL_PASSWORD=*Тут пароль2*
    depends_on:
      - mysql
  • Вопрос задан
  • 100 просмотров
Решения вопроса 1
@SherbakovFirst Автор вопроса
Ошибка была в db.php. Миграция выполнялась спокойно, если были такие значения
'dsn' => 'mysql:host=localhost;port=3306;dbname=',

Но вот запрос на БД не происходил. Ведь на БД надо было ставить
'dsn' => 'mysql:host=mysql;port=3306;dbname=
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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