2013-09-19 2 views
1

Я устанавливаю пакет laravel 4 Entrust. Я создаю файл миграции. Когда я пытаюсь выполнить миграцию, я получаю сообщение об ошибке ограничения внешних ключей. Является ли это проблемой в отношении некоторых настроек PhpMyAdmin? скопировать под ошибки прямо из PowerShell:Laravel4 Entrust - проблема с установкой внешнего ключа

PS C: \ WAMP \ WWW \ Лаборатория \ x_pat> PHP ремесленник доверьте: миграция

Таблицы: роли, assigned_roles, разрешения, permission_role миграции, которая создает " роли "," assign_roles "," permissions "," permission_role "будут созданы в приложении/данных каталог базы/миграции

Продолжить создание миграции? [Да | нет] да

Создание миграции ... Миграция успешно создана!

PS C: \ WAMP \ WWW \ Lab \ x_pat> PHP ремесленника мигрировать

миграции таблицу, созданную успешно.

[Exception] SQLSTATE [HY000]: Общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа (SQL: изменить таблицу assigned_roles добавить константный raint assigned_roles_user_id_foreign внешнего ключа (user_id) ссылается users (id)) (Bindings: массив ( ))

[PDOException] SQLSTATE [HY000]: Общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа

мигрируют [--bench [=»... "]] [--database [=". .. "]] [--path [=" ... "]] [--package [=" ... "]] [--pretend] [--seed]

ответ

0

РЕШИТЬ:

В PhpMyAdmin в только что идти в таблице, которая содержит внешний ключ и нажмите на кнопку INDEX. Таким образом, индекс создается по этому внешнему ключу, а затем в RELATION VIEW можно назначить внешний ключ правильному идентификатору соответствующей таблицы.

Я считаю, что это решение.

+0

Похоже, что тот, кто подготовил файл SQL миграции, забыл об этом индексе. Этот файл появился из самого приложения? –

+0

Однако при миграции индексы отсутствовали, но даже добавление их давало ту же ошибку. Я должен был добавить их вручную. – johnnyfittizio

+0

Извините, Марк, могу я задать вам последний вопрос: при назначении внешнего ключа правильно оставить ON DELETE - RESTRICT и ON-UPDATE - RESTRICT? – johnnyfittizio

1

Ограничения внешнего ключа не выполняются phpMyAdmin (это веб-интерфейс), а сервером MySQL.

Существует много возможностей для этой ошибки; это может быть связано с тем, что структура таблиц не позволяет это (например, отсутствующие индексы) или из-за существующих данных, которые не учитывают ограничение, которое вы хотите добавить.

+0

Спасибо, Марк. Да, это были недостающие индексы. Я не понимаю, что это такое, но таким образом мне удалось решить проблему. – johnnyfittizio

1

Ошибка связана с отсутствием ссылки на добавление внешнего ключа (user_id), ссылающегося на пользователей (id). Убедитесь, что таблица пользователей существует до запуска переноса доверенности.

1

Я должен был убедиться, что таблица моих пользователей имеет свой атрибут столбца «id», установленный в «unsigned». Это соответствует атрибуту столбца user_id в таблице порученных назначенных_ролей. Это позволило миграции для меня.

0

Корневая проблема заключается в файле EntrustSetupTables в папке миграции, в этой линии:

 $table->foreign('user_id')->references('id')->on('') 
      ->onUpdate('cascade')->onDelete('cascade'); 

Просто поместите имя пользователей таблицы после .on(), и проблема будет решена.

Смежные вопросы