yii2 sqlite не удается разрешить имена таблиц

Я нашел какую-то ошибку в sqlite-conf, я не знаю, но она, кажется, не работает так, как задумано. Вещь у меня следующая db.php файл

return [
'class' => 'yii\db\Connection',
'dsn' => 'sqlite:somedb',
'charset' => 'utf8',

];

Я могу создавать и запускать миграции

    use yii\db\Migration;
    use yii\db\sqlite\Schema;

class m160222_083002_create_some_table extends Migration
{
    public function up()
    {
        $this->createTable('some_table', [
            'id' => Schema::TYPE_PK,
            'name' => Schema::TYPE_STRING
        ]);
    }

    public function down()
    {
        $this->dropTable('some_table');
    }
}

это отлично работает, создает таблицу и т. д.

    $ ./yii migrate
Yii Migration Tool (based on Yii v2.0.7)

Total 1 new migration to be applied:
        m160222_083002_create_some_table

Apply the above migration? (yes|no) [no]:y
*** applying m160222_083002_create_some_table
    > create table some_table ... done (time: 0.109s)
*** applied m160222_083002_create_some_table (time: 0.170s)


1 migration was applied.

Migrated up successfully.

Но затем приходит немного магии. Я не могу использовать генераторы gii с моего локального сервера, например

somelocal.loc/gii/model

когда я ввожу имя таблицы как

some_table

Ответ

Таблица 'some_table' не существует.

Однако работающий генератор моделей gii от CLI работает отлично

    $ ./yii gii/model --tableName=some_table --modelClass=someTable
Running 'Model Generator'...

The following files will be generated:
        [new] models/someTable.php

Ready to generate the selected files? (yes|no) [yes]:y

Files were generated successfully!
Generating code using template "/var/www/sweethouse.loc/vendor/yiisoft/yii2-gii/generators/model/default"...
 generated models/someTable.php
done!

генерирует следующий код

    namespace app\models;

use Yii;

/**
 * This is the model class for table "some_table".
 *
 * @property integer $id
 * @property string $name
 */
class someTable extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'some_table';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['name'], 'string', 'max' => 255]
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'name' => 'Name',
        ];
    }
}

Но если бы только

somelocal.loc/gii/model

не сработало, это не жалко, генератор CLI более дружелюбен.

Но самая важная проблема для меня, что mysite не может разрешить имена таблиц, ActiveRecord не видит его и вылетает сайт с последующей ошибкой

    Database Exception – yii\db\Exception

SQLSTATE[HY000]: General error: 1 no such table: some_table
Failed to prepare SQL: SELECT * FROM `some_table`
Error Info: Array
(
    [0] => HY000
    [1] => 1
    [2] => no such table: some_table
)
↵
Caused by: PDOException

SQLSTATE[HY000]: General error: 1 no such table: some_table

in /var/www/mysite/vendor/yiisoft/yii2/db/Command.php at line 225

И действие контроллера, где я хочу получить доступ к моим значениям таблицы

public function actionSome()
{
    $some = someTable::find()->all();

    return $this->render('some',[
        'some' => $some
    ]);
}

Следующая ошибка приходит только с базой данных sqlite3

1 ответ

Установите значение dsn с системным путем к базе данных.

Чтобы сделать его переносимым, используйте псевдоним пути, предоставляемый yii:

'dsn' => 'sqlite:@app/db/database.db',
Другие вопросы по тегам