PHP ActiveRecord - не удалось найти связь в модели - PullRequest
1 голос
/ 12 марта 2012

Я использую Codeigniter 2.1.0 вместе с искрой для включения PHP ActiveRecord , и я не могу создать ассоциацию многие ко многим через таблицу поиска. Всякий раз, когда я загружаю модель события, происходит сбой с сообщением «Не удалось найти категории событий ассоциации в модели события», которое представляет собой ActiveRecord \ HasManyThroughAssociationException

В соответствии с этой темой Я пытался обновить мой источник с помощью этого патча без эффекта.

Я также следовал этой ветке и основывал свою ассоциацию на приведенном там решении.

Я получил следующий sql: http://pastebin.com/ya65VWHC и следующие модели: http://pastebin.com/XEDTb6KS

Я пытаюсь связать одно событие с несколькими категориями, например, футбольное игровое событие может иметь категории «спорт», «семья» и «веселье».

Я что-то упустил фундаментальное?

1 Ответ

1 голос
/ 13 марта 2012

Я не могу протестировать все, так как у меня нет базы данных, в которую я мог бы записать ваш код (и у меня тоже нет тестовых данных :)), но ваш код имеет некоторые отличия от руководства.

Если вы посмотрите на эту страницу: http://www.phpactiverecord.org/projects/main/wiki/Associations#has_many_through

Вы видите три таблицы, на которых эта карта выглядит так (я думаю)

 Order        -> Category   
 Payment      -> Eventcategory 
 User         -> Event

A Category имеет несколько *От 1010 * до Eventcategory, так же как у Order в этом примере несколько Users до Payment.Обратный путь определяется более базовым (a User имеет Orders)

Там, где вы определили 2 сквозных отношения, в этом примере есть только один в классе Order, оставляя user просто с has_many.Это большая разница, я думаю, вам, возможно, придется обратиться.

Кроме того, я не совсем уверен относительно foreign_key определений, которые вы делаете в этой части:

array('events', 'foreign_key' => 'event_id',
              array('through' => 'eventcategories', 'foreign_key' => 'event_id')

Если вы 'у нас есть схема именования по умолчанию, которую вам не нужно явно называть.

Чтобы исправить это, я бы начал с примера заказ / пользователь / платеж, проверил, работает ли он для вас, а затем заменилвсе части (осторожно :)), чтобы он стал вашим кодом.

...