Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Приветствую всех!
При выполнении команды php artisan migrate выдается сообщение в консоли: "[ErrorException]: strtolower() expects parameter 1 to be string, array given.
Виновник ошибки миграция:
Schema::create('questions_tags_relationships', function (Blueprint $table) {
$table->integer('question_id');
$table->integer('tag_id');
$table->primary(['question_id'], ['tag_id']);
});
Schema::table('questions_tags_relationships', function ($table) {
$table->foreign('question_id')->references('id')->on('questions');
$table->foreign('tag_id')->references('id')->on('tags');
});
В чем собственно может быть проблема?
Изменено MMysiv (06.10.2016 09:57:39)
Не в сети
может быть так $table->primary(['question_id', 'tag_id']); ?
Не в сети
а нахрена комбинированный примари на таблицу связей ?
понты?
если нет, то по простому индексу на каждую колонку и 2 простый форейна.
Изменено hzone (06.10.2016 17:30:26)
Не в сети
а нахрена комюинированный примари на таблицу связей ?
понты?
если нет, то по простому индексу на каждую колонку и 2 простый форейна.
Благодарю за помощь! Миграция проходит, но выдает что не может установить внешние ключи:
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL
: alter table `blagst_questions_tags_relationships` add constraint `questio
ns_tags_relationships_question_id_foreign` foreign key (`question_id`) refe
rences `blagst_questions` (`id`))
Вот собственно сама миграция.
Schema::create('questions_tags_relationships', function (Blueprint $table) {
$table->integer('question_id')->index();
$table->integer('tag_id')->index();
});
Schema::table('questions_tags_relationships', function ($table) {
$table->foreign('question_id')->references('id')->on('questions');
$table->foreign('tag_id')->references('id')->on('tags');
});
А вот миграции таблиц questions и tags:
Schema::create('questions', function (Blueprint $table) {
$table->increments('id');
$table->integer('question_author')->unsigned();
$table->string('question_title')->index();
$table->text('question_details');
$table->string('question_status')->default('Ожидает подтверждения');
$table->timestamp('question_created');
$table->timestamps();
});
Schema::table('questions', function ($table) {
$table->foreign('question_author')->references('id')->on('users');
});
Schema::create('tags', function (Blueprint $table) {
$table->increments('id');
$table->string('tag_name');
$table->string('tag_name_eng');
$table->string('tag_description');
$table->timestamp('question_created');
$table->timestamps();
});
Не в сети
Ох....
Сначала создаются таблицы с данными, а уже потом связей. А то форейн не видит куда ссылается - нет такой таблицы, тоесть у тебя наоборот. связи потом таблицы, при этом связи не видят что связывать. Понятно?
Schema::create('questions_tags', function (Blueprint $table) {
$table->bigInteger('question_id');
$table->bigInteger('tag_id');
$table->foreign('question_id')->references('id')->on('questions')->onDelete('cascade');
$table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade');
});
Изменено hzone (06.10.2016 17:31:58)
Не в сети
и
$table->timestamp('question_created');
тебе не надо. в $table->timestamps(); всё и так есть
Не в сети
Добавь unsigned():
$table->integer('question_id')->unsigned()->index();
$table->integer('tag_id')->unsigned()->index();
Не в сети
Добавь unsigned():
$table->integer('question_id')->unsigned()->index(); $table->integer('tag_id')->unsigned()->index();
и что получится? хвост отдельно от ящерицы?
в таблице связей быть не должно строк связующих что-либо с несуществующими записями в других таблицах, а контролит это форейнКей.
Не в сети
Ох....
Сначала создаются таблицы с данными, а уже потом связей. А то форейн не видит куда ссылается - нет такой таблицы, тоесть у тебя наоборот. связи потом таблицы, при этом связи не видят что связывать. Понятно?
Конечно, я понимаю этот момент. Но в том и дело, что таблица отношения создается последней. Вот эти файлы:
Questions table: 2016_10_06_061046_create_questions_table.php
Tags table: 2016_10_06_063818_create_tags_table.php
QuestionsTagsRelationships: 2016_10_06_063900_create_questions_tags_relationships.php
Это не единственные таблицы у меня, в которых есть внешние ключи. Я думал что есть еще что-то, что может вызывать эту ошибку. Даже не знаю что думать.
Не в сети
я писал готовый код выше. используй
Не в сети
и форейны пиши не вторым дёрганьем схемы, а внутри первого.
Не в сети
и форейны пиши не вторым дёрганьем схемы, а внутри первого.
Я использовал ваш код. Таблицы создаются, но форейны нет. Все так же ругается на таблицу отношений. В чем еще может быть проблема? Может есть способ проверить очередность создания таблиц?
Не в сети
Хех. Возможно это странно только мне, но проблема решилась после описания функции down(). Во всяком случае, еще 1 вопрос: создавать ли индексы в столбцах таблицы отношений?
Не в сети
AlexeyMezenin пишет:Добавь unsigned():
$table->integer('question_id')->unsigned()->index(); $table->integer('tag_id')->unsigned()->index();
и что получится? хвост отдельно от ящерицы?
в таблице связей быть не должно строк связующих что-либо с несуществующими записями в других таблицах, а контролит это форейнКей.
Я написал это в дополнение к твоим словам, думаю это очевидно. Без unsigned() работать не будет.
Не в сети
Хех. Возможно это странно только мне, но проблема решилась после описания функции down(). Во всяком случае, еще 1 вопрос: создавать ли индексы в столбцах таблицы отношений?
конечно, и даже можно уникальный-комбинированный
Не в сети
hzone пишет:AlexeyMezenin пишет:Добавь unsigned():
$table->integer('question_id')->unsigned()->index(); $table->integer('tag_id')->unsigned()->index();
и что получится? хвост отдельно от ящерицы?
в таблице связей быть не должно строк связующих что-либо с несуществующими записями в других таблицах, а контролит это форейнКей.Я написал это в дополнение к твоим словам, думаю это очевидно. Без unsigned() работать не будет.
интересно как ты будешь себя чуствовать на posgresql или ibm informix )
но всё равно сапсибо за дискуссию)
Не в сети
интересно как ты будешь себя чуствовать на posgresql или ibm informix )
но всё равно сапсибо за дискуссию)
Слов много, смысла ноль. Ты хочешь сказать, что unsigned() здесь не нужен? Если да, то почему?
Не в сети
hzone пишет:интересно как ты будешь себя чуствовать на posgresql или ibm informix )
но всё равно сапсибо за дискуссию)Слов много, смысла ноль. Ты хочешь сказать, что unsigned() здесь не нужен? Если да, то почему?
unsigned присуще всё же больше только mysql
у постгреса нет такого понятия, либо пиши эту функцию сам (и не забудь заодно написать тип данных, его поддерживающий)
Не в сети
Страницы 1