Сущность Symfony2 найти все()

У меня есть таблица базы данных с 7 строками, я пытаюсь получить эти строки с помощью функции findAll.

$machine_current_counter_repo = $this->getDoctrine()->getRepository('DummyMonitorBundle:MachineCurrentCounter');

$counters = $machine_current_counter_repo->findAll();

В результате получается 7 строк, но все строки содержат данные из первой строки.

Вот сущность таблицы базы данных.

И структура таблицы:

`machine_current_counter` (
  `machine_id` tinyint(3) unsigned NOT NULL,
  `counter_value` int(10) unsigned NOT NULL,
  `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`machine_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Что может вызвать эту проблему?

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

/**
 * @var boolean
 *
 * @ORM\Column(name="machine_id", type="boolean")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
private $machineId;

person antanas_sepikas    schedule 06.05.2014    source источник
comment
Странно.. Пересоздайте схему, вставьте данные и снова проверьте   -  person wachme    schedule 06.05.2014


Ответы (1)


@ORM\Id означает, что значения этого поля ДОЛЖНЫ быть уникальными. С логическим типом они могут быть уникальными только в 2 или менее строках (поскольку логический тип имеет только 2 значения — 0 и 1). Я думаю, что у вас есть логическая ошибка, и вы должны просто изменить тип поля на целое число. Как это:

/**
 * @var integer
 *
 * @ORM\Column(name="machine_id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
private $machineId;

Затем обновите свою схему с помощью ./app/console doctrine:schema:update, затем заново создайте данные в таблице.

person Neka    schedule 06.05.2014
comment
Я решил это, как вы говорите, изменив типы и вручную изменив таблицу на machine_id int(10) unsigned NOT NULL, из machine_id machine_id tinyint(3) unsigned NOT NULL. Хотя теперь, когда я думаю об этом, ./app/console doctrine:schema:update, вероятно, сделал бы то же самое. - person antanas_sepikas; 06.05.2014
comment
Вы должны изменить информацию в сопоставленном объекте, а не непосредственно на сервере sql. Это вызовет много ошибок в будущем. Например, когда вы обновите схему своей базы данных, она попытается вернуться к tinyint(3) - person Neka; 06.05.2014