Я не думаю, что это возможно. Какой у вас вариант использования? Я считаю, что C # ArrayLists имеет свойство .capacity, но класс Java ArrayList не предоставляет эту информацию.
У вас есть конструктор, который принимает начальный аргумент емкости, и у вас есть метод sureCapacity (), который вы могли бы использовать для уменьшения количества постепенного перераспределения.
У вас также есть метод trimToSize (), который вы можете использовать, если действительно беспокоитесь об использовании памяти.
Это вопрос, на который можно получить ответ на самом деле проще, чем я думал вначале ...
Давайте начнем с того, что у вас есть сейчас:
Doctrine_Record
Test
для моих примеров. Test
вы хотите использовать поведение Timestampable
, но с временными метками UNIX, а не datetime
values Решением этой проблемы было бы не использовать поведение по умолчанию Timestampable
, которое поставляется с Доктрина, но другая, которую вы определите.
Это означает, что в вашей модели у вас будет что-то вроде этого внизу метода setTableDefinition
:
$this->actAs('MyTimestampable');
(я полагаю, это также может быть в методе setUp
, кстати - может быть, это было бы реальное место на самом деле)
Теперь нам нужно определить это поведение MyTimestampable
, чтобы оно делало то, что мы хотим.
Поскольку Doctrine_Template_Timestampable
Doctrine уже достаточно хорошо выполняет свою работу (за исключением формата, конечно) , мы унаследуем его; надеюсь, это будет означать меньшее количество кода для написания ; -)
Итак, мы объявляем наш класс поведения следующим образом:
class MyTimestampable extends Doctrine_Template_Timestampable
{
// Here it will come ^^
}
Теперь давайте посмотрим, что на самом деле делает Doctrine_Template_Timestampable
, в исходном коде Doctrine:
created_at
и updated_at
) $this->addListener(new Doctrine_Template_Listener_Timestampable($this->_options));
Давайте посмотрим на источник этого; мы замечаем эту часть:
if ($options['type'] == 'date') {
return date($options['format'], time());
} else if ($options['type'] == 'timestamp') {
return date($options['format'], time());
} else {
return time();
}
Это означает, что если тип двух полей created_at
и updated_at
не является ни date
, ни отметкой времени
,
теперь мы получаем следующее:
mysql> select * from test;
+----+--------+----------------+------------+------------+
| id | name | value | created_at | updated_at |
+----+--------+----------------+------------+------------+
| 1 | Test 1 | My Value 1 | 1248805507 | 1248805507 |
| 2 | Test 2 | My New Value 2 | 1248805583 | 1248805821 |
+----+--------+----------------+------------+------------+
2 rows in set (0.00 sec)
Поле updated_at
было обновлено, а поле created_at
не изменилось; что тоже кажется нормальным ; -)
Итак, чтобы сделать вещи краткими, уместите пару пунктов и немного подытожьте:
MyTimestampable
, а не по умолчанию Timestampable
Я позволю вам провести более интенсивные тесты, но я надеюсь, что это поможет!
Удачи : -)
Одним из методов было бы использование слушателей Doctorine для создания эквивалента временной метки unix при получении записи и перед ее сохранением:
class Base extends Doctrine_Record_Listener
{
public function preHydrate(Doctrine_Event $event)
{
$data = $event->data;
$data['unix_created_at'] = strtotime($data['created_at']);
$data['unix_updated_at'] = strtotime($data['updated_at']);
$event->data = $data;
}
}
Это может быть ваш базовый класс, который вы расширяете во всем, что нуждается в функциях created_at и updated_at.
Я уверен, что немного повозившись, вы могли бы перебрать $ data и преобразовать все поля datetime 'unix _'. $ field_name.
Удачи