The other has to be constrained to a PK because it was de default behavior of Reactor. The default load() (no params) was to load a record based on his PKs, then Doug implemented this new functionality so we could load a record based by any field by just passing an collection of arguments into it.
João Fernandes -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Ray West Sent: quinta-feira, 10 de Agosto de 2006 18:00 To: [email protected] Subject: Re: [Reactor for CF] Ambiguous Record Problem OK, I found a way around still using my view. Still not sure why the other way would have to be constrained to a PK, but this will work and allow me to handle my object the way I need to. Thanks a lot everyone. Ray João Fernandes wrote: > Sorry ray, you missunderstood me, > > This is what reactor does when you call load method on your record. > > <cfset record.load()> > > Executes load method from the abstractRecord (reactor.base.abstractRecord) > > Look this code > <!-------------- CODE INSIDE LOAD METHOD OF THE RECORD --------------------> > <cfif IsDefined("arguments") AND fieldList IS 1> > <cfset fieldList = arguments[1] /> > > <cfelseif IsDefined("arguments") AND fieldList IS NOT 1> > <cfloop collection="#arguments#" item="item"> > <cfinvoke component="#this#" method="set#item#"> > <cfinvokeargument name="#item#" > value="#arguments[item]#" /> > </cfinvoke> > </cfloop> > > </cfif> > > <cftry> > <cfset _getDao().read(_getTo(), fieldList) /> > <cfcatch type="Reactor.Record.NoMatchingRecord"> > <cfset nothingLoaded = true /> > </cfcatch> > </cftry> > <!-------------- CODE INSIDE LOAD METHOD OF THE RECORD --------------------> > > When it calls <cfset _getDao().read(_getTo(), fieldList) /> > It will invoke read method in the DAO passing all arguments to it, but since > you didn't pass any (in this case) inside the DAO you'll be executing > > <!-------------- CODE INSIDE READ METHOD OF THE DAO -----------------------> > <cfif Len(arguments.loadFieldList)> > <cfset UserQuery = UserGateway.createQuery() /> > <cfloop list="#arguments.loadFieldList#" > index="field"> > <cfset UserQuery.getWhere().isEqual("User", > field, arguments.to[field]) /> > </cfloop> > > <cfset qRead = > UserGateway.getByQuery(UserQuery,true) /> > <cfelse> > <cfset qRead = UserGateway.getByFields( > > ) /> > </cfif> > <!-------------- CODE INSIDE READ METHOD OF THE DAO -----------------------> > Since the arguments.loadFieldList in your case will be empty, it will > execute > <cfset qRead = UserGateway.getByFields( ) /> > > It should be > <cfset qRead = UserGateway.getByFields( UserId = arguments.to.UserId ) /> > > Why is it doing this? > > Because it couldn't find the primary key during the generation > > Try to run this query > > SELECT > col.COLUMN_NAME as name, > CASE > WHEN colCon.CONSTRAINT_NAME IS NOT > NULL THEN 'true' > ELSE 'false' > END as primaryKey, > CASE > WHEN > columnProperty(object_id(col.TABLE_NAME), col.COLUMN_NAME, 'IsIdentity') > 0 > THEN 'true' > ELSE 'false' > END AS [identity], > CASE > WHEN col.IS_NULLABLE = 'No' THEN > 'false' > ELSE 'true' > END as nullable, > > col.DATA_TYPE as dbDataType, > CASE > WHEN > ISNUMERIC(col.CHARACTER_MAXIMUM_LENGTH) = 1 THEN > col.CHARACTER_MAXIMUM_LENGTH > ELSE 0 > END as length, > col.COLUMN_DEFAULT as [default] > FROM INFORMATION_SCHEMA.COLUMNS as col LEFT JOIN > INFORMATION_SCHEMA.TABLE_CONSTRAINTS as tabCon > ON col.TABLE_NAME = tabCon.TABLE_NAME > AND tabCon.CONSTRAINT_TYPE = 'PRIMARY KEY' > LEFT JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE > as colCon > ON col.COLUMN_NAME = colCon.COLUMN_NAME > AND col.TABLE_NAME = colCon.TABLE_NAME > AND colCon.CONSTRAINT_NAME = > tabCon.CONSTRAINT_NAME > WHERE col.TABLE_NAME = 'User' > > And drop the result here. > > João Fernandes > > > > > > > > > -----Original Message----- > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On > Behalf Of Ray West > Sent: quinta-feira, 10 de Agosto de 2006 16:41 > To: [email protected] > Subject: Re: [Reactor for CF] Ambiguous Record Problem > > OK, replying to a couple of emails here. Thanks everyone for the help... > > Yes the UserID field is definitely a PK. I turned it off and saved and > turned it back on to be sure it was set. Same problem exists. > > While the PK was turned off I tried the shortcut method. It still worked. > > I am in development mode. > > I have deleted all of my project files and they were recreated... Same > problem exists. > > So are you saying that I can only 'search' by fields that are primary > keys? What if I want to create a record and run a login script on it > comparing a username and password that are not keys? This works using > the shortcut method. Why should it not work by setting the properties > and loading the object? > > Hope I answered everything. > > Ray > > > João Fernandes wrote: >> The problem is, when you use >> <cfset record.setUserid(someval)> >> <cfset record.load()> >> >> In the read method inside UserDao.cfc if you take a look into the code I >> posted in my last email, load() and load(userid=val) go through different >> paths. The load() method goes through >> >> <cfset qRead = UserGateway.getByFields( >> <!------- This part is blank -------> >> ) /> >> >> The part in blank is where reactor should put the code to load the record >> based on the primary key definition. Delete your project files and >> regenerate to see if the problem persists. >> >> João Fernandes >> >> >> -----Original Message----- >> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On >> Behalf Of Ray West >> Sent: quinta-feira, 10 de Agosto de 2006 16:15 >> To: [email protected] >> Subject: Re: [Reactor for CF] Ambiguous Record Problem >> >> The shortcut method appears to be using the same setUserID property >> setter that I am calling. And yet the shortcut method works... >> >> Ray >> >> >> Ray West wrote: >>> frak... well... it is not working here and I need to be able to pass the >>> object into a method for processing (not to mention that that is the >>> better way to do it) so the shortcut method won't work for this. >>> >>> R >>> >>> Jared Rypka-Hauer wrote: >>>> I've been using it just fine with SQL Server for eons... well, not >>>> eons, but a long time. >>>> >>>> I'm trying to think of what the issue could be man. Coming up, as >>>> usual, with a big fat blank. ;) >>>> >>>> J >>>> >>>> >>>> ------------------------------------------------ >>>> >>>> Jared C. Rypka-Hauer >>>> >>>> Continuum Media Group LLC >>>> >>>> http://www.web-relevant.com >>>> >>>> Member, Team Macromedia - ColdFusion >>>> >>>> >>>> "That which does not kill me makes me stranger." - Yonah Schmeidler >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> On Aug 10, 2006, at 9:25 AM, Ray West wrote: >>>> >>>>> NP Chris, >>>>> >>>>> This is an exception thrown by Reactor and not a CF error. I don't >>>>> get anything extra when I turn on debugging in CF. A query of some >>>>> sort apparently runs fine, it just returns unexpected data. >>>>> >>>>> I am going to load the new version and see if there is any difference. >>>>> >>>>> Have anyone reproduced this or gotten it to run correctly with SQL >>>>> Server? >>>>> >>>>> Ray >>>>> >>>>> Chris Phillips wrote: >>>>>> I appologize Ray. >>>>>> I didn't catch that you were saying that >>>>>> <cfset objUser.setUserID(1) /> >>>>>> <cfset objUser.load() /> >>>>>> didn't work >>>>>> and >>>>>> <cfset objUser.load(UserID=1) /> >>>>>> did. >>>>>> Which makes this rather wierd. >>>>>> If it were me, I'd turn on debugging and watch the queries that CF >>>>>> is generating to see how they are different. >>>>>> Let us know what you see. >>>>>> Regards, >>>>>> Chris >>>>>> On 8/9/06, *Ray West* <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> >>>>>> wrote: >>>>>> It is... second guess? :-) >>>>>> Can anyone repro this? >>>>>> Ray >>>>>> Chris Phillips wrote: >>>>>> > First guess is that UserID is not a PrimaryKey. >>>>>> > >>>>>> > On 8/9/06, *Ray West* < [EMAIL PROTECTED] <mailto:[EMAIL >>>>>> PROTECTED]> >>>>>> <mailto:[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>> wrote: >>>>>> > >>>>>> > Hi, >>>>>> > >>>>>> > In MS SQL Server, whenever I create a record and do this: >>>>>> > >>>>>> > <cfset objUser.setUserID (1) /> >>>>>> > <cfset objUser.load() /> >>>>>> > >>>>>> > I get an ambiguous record error, even though there is >>>>>> only one >>>>>> > record in >>>>>> > the table with that ID. >>>>>> > >>>>>> > When I do: >>>>>> > >>>>>> > <cfset objUser.load(UserID=1) /> >>>>>> > >>>>>> > It works fine. >>>>>> > >>>>>> > Any help appreciated... >>>>>> > >>>>>> > Ray >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- >>>>>> -- -- >>>>>> > -- -- -- -- -- >>>>>> > Reactor for ColdFusion Mailing List >>>>>> > [email protected] <mailto:[email protected]> >>>>>> <mailto:[email protected] <mailto:[email protected]>> >>>>>> > Archives at: >>>>>> http://www.mail-archive.com/reactor%40doughughes.net/ >>>>>> > < http://www.mail-archive.com/reactor%40doughughes.net/> >>>>>> > -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- >>>>>> -- -- -- >>>>>> > -- -- -- -- -- >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > -- >>>>>> > Chris Phillips >>>>>> > www.dealerpeak.com <http://www.dealerpeak.com> >>>>>> <http://www.dealerpeak.com> >>>>>> > Senior Application Developer >>>>>> > -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- >>>>>> -- -- -- >>>>>> > -- -- -- -- >>>>>> > Reactor for ColdFusion Mailing List >>>>>> > [email protected] <mailto:[email protected]> >>>>>> > Archives at: >>>>>> http://www.mail-archive.com/reactor%40doughughes.net/ >>>>>> > -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- >>>>>> -- -- -- >>>>>> > -- -- -- -- >>>>>> -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- >>>>>> -- -- >>>>>> -- -- -- -- >>>>>> Reactor for ColdFusion Mailing List >>>>>> [email protected] <mailto:[email protected]> >>>>>> Archives at: http://www.mail-archive.com/reactor%40doughughes.net/ >>>>>> <http://www.mail-archive.com/reactor%40doughughes.net/> >>>>>> -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- >>>>>> -- -- >>>>>> -- -- -- -- >>>>>> -- >>>>>> Chris Phillips >>>>>> www.dealerpeak.com <http://www.dealerpeak.com> >>>>>> Senior Application Developer >>>>>> -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- >>>>>> -- -- -- -- >>>>>> Reactor for ColdFusion Mailing List >>>>>> [email protected] <mailto:[email protected]> >>>>>> Archives at: http://www.mail-archive.com/reactor%40doughughes.net/ >>>>>> -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- >>>>>> -- -- -- -- >>>>> >>>>> -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- >>>>> -- -- -- -- >>>>> Reactor for ColdFusion Mailing List >>>>> [email protected] <mailto:[email protected]> >>>>> Archives at: http://www.mail-archive.com/reactor%40doughughes.net/ >>>>> -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- >>>>> -- -- -- -- >>>>> >>>> -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- >>>> -- -- -- -- >>>> Reactor for ColdFusion Mailing List >>>> [email protected] >>>> Archives at: http://www.mail-archive.com/reactor%40doughughes.net/ >>>> -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- >>>> -- -- -- -- >>> >>> -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- >>> -- -- -- >>> Reactor for ColdFusion Mailing List >>> [email protected] >>> Archives at: http://www.mail-archive.com/reactor%40doughughes.net/ >>> -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- >>> -- -- -- >>> >>> >>> >> >> >> -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- >> -- -- >> Reactor for ColdFusion Mailing List >> [email protected] >> Archives at: http://www.mail-archive.com/reactor%40doughughes.net/ >> -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- >> -- -- >> >> >> >> -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > -- -- >> Reactor for ColdFusion Mailing List >> [email protected] >> Archives at: http://www.mail-archive.com/reactor%40doughughes.net/ >> -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > -- -- >> >> > > > > -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > -- -- > Reactor for ColdFusion Mailing List > [email protected] > Archives at: http://www.mail-archive.com/reactor%40doughughes.net/ > -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > -- -- > > > > -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > Reactor for ColdFusion Mailing List > [email protected] > Archives at: http://www.mail-archive.com/reactor%40doughughes.net/ > -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- > > > -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Reactor for ColdFusion Mailing List [email protected] Archives at: http://www.mail-archive.com/reactor%40doughughes.net/ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Reactor for ColdFusion Mailing List [email protected] Archives at: http://www.mail-archive.com/reactor%40doughughes.net/ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
