Я очень раздражен тем, что вы не справляетесь с обработкой Enel столбцов (используя Propel 1.6.9 и MySQL). Кажется, что он всегда возвращает значения по умолчанию.propel всегда выбирает значение по умолчанию для перечисляемых столбцов?
Оператор CREATE-заявление таблицы:
CREATE TABLE IF NOT EXISTS `offerVariant` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`offerID` int(11) unsigned NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`description` text COLLATE utf8_unicode_ci NOT NULL,
[1] -> `amountType` enum('entity','person') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'entity',
`unitCount` smallint(5) unsigned DEFAULT NULL,
[2] -> `priceType` enum('per night','per day','per hour','flat rate') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'per night',
`tax` tinyint(3) NOT NULL DEFAULT '7',
`maxPrice` decimal(12,2) NOT NULL DEFAULT '0.00',
PRIMARY KEY (`id`),
KEY `offerID` (`offerID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ;
Это соответствующая часть моего schema.xml:
<table name="offerVariant">
<column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
<column name="offerID" type="integer" size="11" required="true" />
<column name="name" type="varchar" size="255" required="true" />
<column name="description" type="longvarchar" required="true" />
[1] -> <column name="amountType" type="enum" valueSet="entity, person" sqlType="ENUM('entity','person')" required="true" />
<column name="unitCount" type="smallint" size="5" required="false" />
[2] -> <column name="priceType" type="enum" valueSet="per night, per day, per hour, flat rate" sqlType="ENUM('per night','per day','per hour','flat rate')" required="true" />
<column name="tax" type="tinyint" size="3" required="true" />
<column name="maxPrice" type="decimal" size="14" required="true" />
<foreign-key foreignTable="offer" refPhpName="offerVariant">
<reference local="offerID" foreign="id"/>
</foreign-key>
</table>
У меня есть 2 перечислений-столбцы, количествоType и ценаType. я выбираю 2 строки из этой таблицы
- один с amountType == объекта | priceType == за ночь
- один с amountType == человек | priceType == в день
Значение по умолчанию amountType является сущность, из priceTypeза ночь.
Принести ряды таким образом:
public function selectVariantsByOffer($offerid){
$variants = OffervariantQuery::create()
->filterByOfferId($offerid)
->find();
return $variants;
}
и возвращение:
[0] => Offervariant Object
(
[startCopy:protected] =>
[id:protected] => 1
[amounttype:protected] => 0
[pricetype:protected] => 0
[...]
)
[1] => Offervariant Object
(
[startCopy:protected] =>
[id:protected] => 2
[amounttype:protected] => 0
[pricetype:protected] => 0
[...]
)
после использования добытчиков:
[0] => Array ( [id] => 1 [...] [amountType] => entity [priceType] => per night ) [1] => Array ( [id] => 2 [...] [amountType] => entity [priceType] => per night )
просто неправильно.
Я читал о том, что Propel интерпретирует type = "enum" другим способом, чем MySQL, и что было бы необязательно установить sqlType в schema.xml. Я сделал это, как упоминалось выше, перестроен, но никаких изменений.
- Невозможно ли вывести указанное значение перечисления?
- Или мой schema.xml неверный?
- Или я не ошибаюсь?
Я сделал это varchar-way и работает как шарм. Спасибо! – 32bitfloat
yup, это определенно работает. Я тоже использую это решение varchar. –
Просто сделал то же самое поле w/'text',' type = "VARCHAR" sqlType = "TEXT" ', поскольку я не хотел обрабатывать текстовое поле как массив в PHP. – quickshiftin