#php #mysql #cakephp #orm #cakephp-2.5
#php #mysql #cakephp #orm #cakephp-2.5
Вопрос:
Привет разработчикам CakePHP,
CakePHP 2.5.2
У меня есть база данных с Agreements
таблицей. Оно относится к таблицам для взрослых, детей, групп, цен и курсов.
Мой контроллер имеет 3 действия: index
, add
и edit
. Первый, index
, работает нормально, отображает все связанные таблицы на одной странице. Но проблема связана с действиями edit и add .
У моего контроллера есть массивы со связанными данными, и в его массивах нет реальных имен детей, взрослых, групп и так далее. Только числа 1,2,3 и т.д.
Мой AgreementsController.php отправляет ли данные для просмотра с помощью этих команд:
$this->Agreement->recursive = 1;
$adults = $this->Agreement->Adult->find('list');
$childrens = $this->Agreement->Children->find('list');
$groups = $this->Agreement->Group->find('list');
$prices = $this->Agreement->Price->find('list');
$courses = $this->Agreement->Course->find('list');
$this->set(compact('adults', 'childrens', 'groups', 'prices', 'courses'));
Я думаю, что в этих массивах $adults, $ children есть только числа. Почему они не извлекают реальные номера элементов. Мои соглашения / add.ctp:
<?php echo $this->Form->create('Agreement'); ?>
<?php
echo $this->Form->input('date_of_agreement');
echo $this->Form->input('number');
echo $this->Form->input('year');
echo $this->Form->input('adult_id', array (
'type' => 'select',
'options' => $adults
)
);
print_r($adults);
echo $this->Form->input('children_id');
echo $this->Form->input('status_id');
echo $this->Form->input('city_id');
echo $this->Form->input('price_id');
echo $this->Form->input('course_id');
echo $this->Form->input('group_id');
?>
<?php echo $this->Form->end(__('Submit')); ?>
Даже добавление параметра ‘options’ не решает проблему.
Я потратил на это 50 часов, и я не знаю, почему?
Я проверил массив, он выглядит так: Array ( [1] => 1 [2] => 2 )
Можете ли вы помочь мне с этим?
Комментарии:
1. Почему в вопросе указан код индекса? если ваша проблема заключается в том, что (например)
$adults
является числовым массивом, не имеет значения , как вы ссылаетесь на эту переменную, она будет числовой. Важно то, какое поле отображения для моделей, для которых вы вызываете find list . Перефразируя ваш вопрос, этоWhy is this a numeric array: $adults = $this->Agreement->Adult->find('list');
<- сократите свой вопрос, чтобы включить только то, что имеет отношение к делу, пожалуйста.2. Большое вам спасибо за помощь. Я не знал, что включить в вопрос.
3. Вместо массива ([1] => 1 [2] => 2) вам нужен, например, массив ([1] => ‘Tomas’ [2] => ‘Anna’)?
4. ДА. Например, в таблице соглашений есть Children_id, он содержит число, например 1,2,3,4. В дочерней таблице есть [‘Children’][‘first_name’] . Я хочу показать array Children_id => [‘first_name’] и т.д.
5. [code] СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ
agreements
(id
int(11) NOT NULL АВТО_ИНКРЕМЕНТ, ……….adult_id
int(11) ПО УМОЛЧАНИЮ NULL,children_id
int(11) NOT NULL,status_id
int(11) NOT NULL,city_id
int(11) NOT NULL,price_id
int(11) ПО УМОЛЧАНИЮNULL,course_id
int(11) ПО УМОЛЧАНИЮ NULL,group_id
int(11) ПО УМОЛЧАНИЮ NULL, PRIMARY KEY (id
) ) ENGINE=InnoDB КОДИРОВКА ПО УМОЛЧАНИЮ=latin1 AUTO_INCREMENT=2 ; [/code]
Ответ №1:
В ваших таблицах db переименуйте поля:
- имя_персонала для взрослых> имя_персонала,
- adult_last_name> last_name,
- имя_первого_имя_первого_имя_первого_имя,
- имя_детского_постоянства> last_name,
- группа> имя
- …
В ваших моделях создавайте виртуальные поля:
public $virtualFields = array(
'name' => "CONCAT(Adult.first_name, ' ', Adult.last_name)"
);
очистить кэш и протестировать.
Редактировать
Или вы можете в своем методе find list добавить параметры, например:
$adults = $this->Agreement->Adult->find('list',array(
'fields'=>array('Adult.id','Adult.first_name')
));
Комментарии:
1. переименование полей, хотя и хороший совет, не является основополагающим для ответа. Важным моментом является то, что если список полей не передается в вызов find list, используются первичный ключ модели и поле отображения, которое по умолчанию имеет значение primary key fieldname , что приводит к массиву
pk => pk
.