2016-02-24 2 views
0

Что я хочу сделать, так это сделать мои первичные ключи для добавления к ним текущей даты и времени при сохранении в базе данных. Для примера Самое первое значение столбца первичного ключа будет включать DateTime как 24-02-2016 4:35 так что было бы, какApeending Datetime к первичному ключу при сохранении

240220164350 (The last digit is the auto increment value and previous ones is date and time) 

, а затем второе может быть как

240220164361

И он также должен быть автоматически увеличен.

Любые идеи о том, как я могу достичь такой функциональности?

ответ

0

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

Однако, если вам нравится делать глупые вещи, мы пойдем: не используйте автоинкремент в поле БД и напишите свой собственный метод и вызовите его в обратном вызове beforeSave(), который увеличивает количество записей и добавляет метку времени. Вы должны установить идентификатор вручную и только когда объект является новым.

Проблема, с которой вы столкнетесь, заключается в том, что при удалении записей счет будет неправильным. Если у вас есть [1,2,3] и удалить 2, ваш следующий идентификатор будет снова 3. Таким образом, вам придется хранить общий счет, который когда-либо был сохранен в другом месте. Где и как и особенно надежный - ваша проблема.

Другим решением является использование двух полей, позволяющих DB увеличивать идентификатор и использовать concat() SQL, чтобы объединить их вместе в новое поле с псевдонимом. Или сделайте это using a virtual property of an entity.

Или выполните другое сохранение() после создания записи и объедините оба значения полей и соберите их в третье поле.

+0

Я знаю, но мой клиент хочет от меня .. У меня есть идея для этого .. Что делать, если перед отображением идентификатора прилагает созданное поле с ним? Будет ли это более легко? –

+0

Как я уже сказал, сохраните их отдельно друг от друга и в этом случае используйте виртуальное поле на сущности или напрямую соедините их с помощью concat() на уровне базы данных. См. Обновленный ответ. – burzum

0

Это не очень хорошая идея. вы должны использовать два поля id и time. однако вы можете использовать PHPtime() Функция возвращает текущую временную метку Unix.

подробнее http://php.net/manual/en/function.time.php

Смежные вопросы