2013-08-23 4 views
0

У меня есть несколько мостов в одном классе результатов, которые имеют отношение к тому же еще Класс результата. Например, в классе Текст У меня есть несколько мостов для Пользователь класс. Итак, они будут по умолчанию названы пользователями и users_2s. Я могу переназначить эти имена с помощью опции rel_name_map, но вопрос в том, есть ли какая-то семантика этих имен? Как решено, какой из них будет называться пользователей и какой из них будет называться users_2s? Возможно, если я создам таблицы в другом порядке на другом компьютере, отношения будут названы в другом порядке, а пользователи станут users_2s и наоборот? Если я использую rel_name_map и решил переименовать их, могу ли я быть уверенным, что заказ будет всегда сохранен?Взаимодействие мостов в DBIC

+0

Используете ли вы DBIx :: Class :: Schema :: Loader для создания схемы DBIx :: Class? Обратите внимание, что аббревиатура для DBIx :: Class - это DBIC, а не DBIx, который является целым пространством имен, включая множество разных дискурсов. –

+0

Да, я использую DBIx :: Class :: Schema :: Loader –

ответ

0

Краткий ответ: база данных уже имеет имена для мостов, а DBIx :: Class будет использовать эти имена. Таким образом, вы можете избежать переименования их между запусками, пока вы не меняете свою базу данных между прогонами.

Если вы посмотрите на свою базу данных с помощью правильных инструментов/команд, вы должны увидеть имена «пользователи» и «user_2s», уже связанные с этими мостами. Каждый «мост» - это ограничение внешнего ключа и как таковое имеет имя в вашей схеме исходной базы данных. Функция библиотеки DBIx::Class::Schema::Loader::DBI::_table_fk_info вызывает метод foreign_key_info обработчика DBD для получения мостов и использует данное имя.

Если обработчик не возвращает внешний ключ имен, то это будет генерировать новое имя, используя этот формат: __dcsld__$i, где $i это число, начиная с 1. Нумерация изменится только тогда, когда в базе данных, изменения схемы.

Это dscld означает DBIx::Class::Schema::Loader - и оно не соответствует вашим именам мостов, поэтому ваш код должен получать эти имена из базы данных.

+0

Привет. Спасибо за ваш ответ. Думаю, я не очень четко сформулировал свой вопрос, поэтому я снова зашел: оба моих моста имеют часть внешнего ключа с идентичным именем «пользователь» и оба указывают на одну и ту же таблицу. У меня конфликт. Поэтому я программирую, что имя моста по умолчанию для первого моста, предлагаемое загрузчиком схемы, должно отображаться в «my_name», затем второй мост автоматически преобразуется в «my_name_2s», который, как я сказал, должен отображаться на «его имя». Поэтому мой вопрос заключается в том, могу ли я быть уверен, что «my_name» всегда будет отображать первый предложенный мост и «его имя» на второй на каждой машине, где я его создаю? –

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

  • Нет связанных вопросов^_^