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',