2010-11-15 4 views
1

Я получил следующее соотношение установленный между двумя моделямиAutomagic выберите поле не заселение в CakePHP

  • История belongsTo StoryType
  • StoryType hasMany История

Я настроил-вверх форму для выбора типа StoryType для каждой истории, используя следующий код:

echo $this->Form->input('Story.story_type_id', array('tabindex' => 2)); 

с этой треской е в контроллере, чтобы заполнить список

$this->set('story_types', $this->Story->StoryType->find('list', array ('order' => 'title'))); 

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

Array 
(
    [1] => First Person 
    [3] => Third Person 
) 

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

Любые идеи? Приветствия.

ответ

5

Вы не говоря уже о какой версии CakePHP вы используете, но попробуйте установить storyTypes, а не story_types:

$this->set('storyTypes', $this->Story->StoryType->find('list', array('order' => 'title'))); 

Старые версии CakePHP (pre-1.3) изменены имена переменных переменных на headlessCamelCase и, даже если вы используете 1.3.x, может быть немного затянута инфраструктура. Это немного досягаемость, но достаточно легко протестировать, и кажется, что это может быть причиной вашей проблемы правдоподобно.

Мне будет интересно узнать, что вы узнали.

+0

Я использую 1.3 (.4 я думаю), и ваше решение отлично поработало - один вопрос, однако, означает ли это, что он может измениться, когда я обновляю пирог? – Daniel

+0

Это может быть. Учитывая то, что вы нашли, похоже, что они приняли правильное решение, но еще не пронесли его до конца (читайте: возможная ошибка). Решение об изменении примечания подчеркивания на headlessCamelCase является устаревшим (и плохой, IMO). Они остановили модификацию в самом методе 'set()', но они, возможно, не нашли всех рябь. Взгляните на эту статью (http://archive.robwilkerson.org/2008/12/28/cakephp-watch-out-for-the-compact-function/index.html) и комментарий Nate Abele (бывший разработчик) , –

+0

, если это действительно происходит в 1.3 Я бы держал билет на маяке. Я использовал 1.3, так как это была бета-версия, и у меня никогда не было этой проблемы. – dogmatic69

1

Это немного Hacky, но я думаю, что это будет работать:

echo $this->Form->input('Story.story_type_id', array('tabindex' => 2, 'options' => $story_types)); 
+0

Это будет работать, я думаю, но правильное решение другой. – Daniel

1

вот что вам следует делать .. (esp, для версии 2.x) - в случае, если некоторые люди сталкиваются с одной и той же проблемой.

[внутри constroller действия]

$oneOfTheColumns = 'title'; //just for sake of making it clear - if you have to order the results 

$storyTypes = $this->Story->StoryType('find', array('order'=>$oneOfTheColumns)); 
$this->set(compact('storyTypes')); 

[внутри зрения]

echo $this->Form->input('StoryType'); 
Смежные вопросы