Вопрос по миграциям.

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
floness
Сообщения: 1
Зарегистрирован: 2018.12.13, 19:01

Вопрос по миграциям.

Сообщение floness »

Добрый день! Возник вопрос по миграциям. Вроде делал все как нужно, код ниже, но возникает ошибка при применении сего кода. Ошибка такого рода : > add foreign key fk-member-id: {{%member}} (id) references {{%adview}} (id_member) ...Exception 'yii\d
b\Exception' with message 'SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
The SQL being executed was: ALTER TABLE `member` ADD CONSTRAINT `fk-member-id` FOREIGN KEY (`id`) REFERENCE
S `adview` (`id_member`)'

Error Info:
Array
(
[0] => HY000
[1] => 1215
[2] => Cannot add foreign key constraint

Сам код миграций:
<?php

use yii\db\Migration;

class m130524_201442_create_members_table extends Migration
{
public function up()
{
$tableOptions = null;
if ($this->db->driverName === 'mysql') {
// http://stackoverflow.com/questions/7668 ... unicode-ci
$tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB';
}


$this->createTable('{{%member_stats}}', [
'id_member' => $this->integer(),
'money' => $this->float()->notNull(),
'points_ptc' => $this->float()->notNull(),
'clicks' => $this->integer()->notNull(),
'chart_num' => $this->integer()->notNull()->unique(),
'status' => $this->smallInteger()->notNull()->defaultValue(10),]);

$this->addPrimaryKey('pk-member_stats-id_member','{{%member_stats}}','id_member' );


$this->createTable('{{%adview}}', [
'id_member' => $this->integer(),
'id_ad' => $this->integer(),
'ip' => $this->integer()->notNull(),
'data_view' => $this->dateTime()->notNull(),
], $tableOptions);

$this->createIndex(
'idx-ad-ip', '{{%adview}}', 'ip'
);

$this->createTable('{{%member}}', [
'id' => $this->integer(),
'username' => $this->string()->notNull()->unique(),
'auth_key' => $this->string(32)->notNull(),
'password_hash' => $this->string()->notNull(),
'password_reset_token' => $this->string()->unique(),
'email' => $this->string()->notNull()->unique(),
'created_at' => $this->integer()->notNull(),
'updated_at' => $this->integer()->notNull(),
], $tableOptions);

$this->addPrimaryKey('pk-member-id','{{%member}}','id' );

$this->createIndex(
'idx-member-username',
'{{%member}}',
'username'
);
$this->createIndex(
'idx-member-email',
'{{%member}}',
'email'
);

$this->addForeignKey(
'fk-member_stats-id',
'{{%member}}',
'id',
'{{%member_stats}}',
'id_member',
'CASCADE'
);

$this->addForeignKey(
'fk-member-id',
'{{%member}}',
'id',
'{{%adview}}',
'id_member'
);



}

public function down()
{

$this->dropTable('{{%member}}');
$this->dropTable('{{%adview}}');
$this->dropTable('{{%member_stats}}');
}
}
Слыхал что ключи надо устанавливать на промежуточную таблицу только тогда, когда она уже создана. Поэтому пришлось похимичить с файлом. Какаято ошибка в ключе прошу помочь.
Аватара пользователя
carono
Сообщения: 52
Зарегистрирован: 2018.04.28, 11:05

Re: Вопрос по миграциям.

Сообщение carono »

Тебе в таблицу adview нужно поставить primaryKey
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Вопрос по миграциям.

Сообщение andku83 »

Неверный порядок параметров, сначала идет что ссылает, потом на что ссылается:

Код: Выделить всё

$this->addForeignKey(
	'fk-member_stats-id',
	'{{%member_stats}}',
	'id_member',
	'{{%member}}',
	'id',
	'CASCADE'
);
И желательно таблицы создавать в правильном порядке, в данном случае при создании это не страшно, но вот при откате этой миграции будет ошибка в связи с первым удалением таблицы на которую ссылаются FK.

Код: Выделить всё

public function down()
{
	$this->dropTable('{{%adview}}');
	$this->dropTable('{{%member_stats}}');
	$this->dropTable('{{%member}}');
}
Ответить