CF9 ORM, заполняющий объект объектом

#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. Это будет работать только для ранее сохраненных объектов. Ответ Генри лучше всего подходит для работы с новыми, несохраненными объектами.