#orm #coldfusion
#orm #coldfusion
Вопрос:
Я использую Model-Glue / Coldspring для нового приложения, и я подумал, что добавлю CF9 ORM в микс.
Единственная проблема, с которой я сталкиваюсь прямо сейчас, связана с заполнением сущности объектом. Более или менее приведенный ниже код подтверждает, что может существовать только одно имя пользователя. Существует некоторая другая логика, которая не отображается.
Моей первой мыслью было использовать что-то вроде этого:
var entity = entityload('UserAccount' ,{UserName=arguments.UserAccount.getUserName()},"true")
entity = arguments.UserAccount;
Однако это работает не так, как я ожидал. Возможно ли вообще заполнить сущность объектом или мне нужно использовать установщики?
Комментарии:
1. Работает не так, как вы ожидали? Чего вы ожидаете на самом деле?
2. Я ожидал, что объект будет заполнен значениями из объекта.
3.
UserAccount
должен быть вашим объектом. Просто установитеpersistent=true
на него. Зачем вам нужно заполнять сущность с помощьюUserAccount
?4. аргументы. UserAccount — это объект-значение, переданный из Flex
5. Я думаю, было бы лучше написать ваш init() или populate (), чтобы заполнить ваш объект CF из вашего Flex VO.
Ответ №1:
Не уверен, что это то, что вы ищете. Если у вас есть…
component persistent="true" entityName="Foo"
{
property a;
property b;
}
Вы можете передать структуру во 2-м параметре для инициализации объекта (добавлено в CF9.0.1, я полагаю)
EntityNew("Foo", {a="1",b="2"});
Чтобы заполнить Foo другим объектом, вы можете использовать шаблон Memento и реализовать GetMemento()
функцию для вашего объекта, которая возвращает структуру всех его свойств.
EntityNew("Foo", bar.getMemento());
Однако CF не вызывает ваши пользовательские настройки! Если вы хотите задать их с помощью установщиков, вы можете добавить вызовы к установщикам в вашем init()
конструкторе или использовать выбранную вами платформу MVC для заполнения компонента. В Model-Glue это так makeEventBean()
.
Обновить: Или… Вот способ взлома…
EntityNew("Foo", DeserializeJSON(SerializeJSON(valueObject)));
Используйте это на свой страх и риск. JSON может делать странные вещи с вашими числами и строками ‘yes’, ‘no’, ‘true’, ‘false’. 🙂
Ответ №2:
Возможно ли вообще заполнить сущность объектом или мне нужно использовать установщики?
Если вы имеете в виду «Возможно ли Создать загрузите объект ORM из экземпляра этого постоянного CFC, который уже существует и имеет установленные свойства?», тогда да, вы можете использовать EntityLoadByExample( object,[unique] )
entity = EntityLoadByExample( arguments.userAccount,true );
Это предполагает, что CFC UserAccount был определен как постоянный, и его значение username было установлено перед передачей (что, похоже, имеет место в вашей ситуации).
Имейте в виду, что если в передаваемом вами объекте были установлены какие-либо другие свойства, включая пустые строки, они будут использоваться в качестве фильтров для загрузки объекта, поэтому, если они не совсем соответствуют записи в вашей базе данных, ничего загружено не будет.
Комментарии:
1. Это будет работать только для ранее сохраненных объектов. Ответ Генри лучше всего подходит для работы с новыми, несохраненными объектами.