ColdFusion 9 ORM Отображения отношений - PullRequest
2 голосов
/ 29 декабря 2011

Я пытаюсь определить связь между таблицами, используя ColdFusion 9.0.1 ORM.

У меня есть 2 таблицы: пользователи и компании

Я работаю над отношениями между пользователями и компаниями. Прямо сейчас у меня есть это:

component persistent="true" table="users" datasource="core"
{
    property name="userID" fieldtype="id" column="userID" 
    setter="false" generator="native";

    property name="firstName" length="255";
    property name="lastName" length="255";
    property name="userName" length="45";

    property name="companies" fieldtype="many-to-one" cfc="company" 
    fkcolumn="companyID" singularname="company";

}

и

component persistent="true" table="companies" datasource="core"
{
    property name="companyID" fieldtype="id" column="companyID" 
    setter="false" generator="native";

    property name="companyName" length="255";
    property name="companyCode" length="45";;

    property name="users" fieldtype="one-to-many" fkcolumn="userID" cfc="user"
    cascade="all" inverse="true";


}

У меня проблема с записью в пользовательскую таблицу. Мне нужно записать companyID в таблицу пользователей, чтобы я мог связаться с компанией. На этой вставке я не хочу ничего вставлять в таблицу компаний. Я просто хочу записать в таблицу пользователей и связать ее с таблицей компаний с помощью идентификатора компании в таблице пользователей.

Вот мой код EntitySave:

transaction{

        newUser = EntityNew("user");

            newUser.setCompanies(#FORM.companyID#);     
            newUser.setFirstName(#FORM.firstName#);
            newUser.setLastName(#FORM.lastName#);
            newUser.setUserName(#FORM.userName#);

        EntitySave(newUser);

    }

Когда я запускаю его таким образом, я получаю эту ошибку «Значение свойства java.lang.String не может быть получено из объекта типа companyID. Ожидаемый тип объекта - company.»

Я подумал, может быть, мне нужно иметь отдельное свойство для companyID, например, "property name =" companyID "ormType =" int ", а затем, возможно, я смогу использовать" newUser.setCompanyID (# FORM.companyID #); "в EntitySave, но это не работает. Я получаю сообщение об ошибке ORMReload (), когда у меня это там.

Я, очевидно, очень озадачен лучшим способом установить отношения. Я могу заставить это работать, не пытаясь официально ссылаться на отношения в файле user.cfc и просто используя свойство name = "companyID" ormType = "int", но это не дает мне правильную связь между таблицами. Я думаю?

Любая помощь по этому вопросу будет отличной.

Заранее спасибо.

Ответы [ 2 ]

5 голосов
/ 30 декабря 2011

Попробуйте изменить это:

newUser.setCompanies(#FORM.companyID#);     

к этому:

newUser.setCompanies(EntityLoadByPK ("company", FORM.companyID));   
0 голосов
/ 07 февраля 2012

что с последним "правдой"? Я не думаю, что это необходимо, если вы не используете EntityLoad () -

EntityLoadByPK ("company", FORM.companyID)

возвращает массив, содержащий все объекты, которые соответствуют критериям (pk=FORM.companyID)

EntityLoadByPK ("company", FORM.companyID, true)

возвращает объект, соответствующий критериям (pk=FORM.companyID)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...