Непростой запрос объединения Coldfusion в CFC с базой данных MySQL - PullRequest
1 голос
/ 23 июня 2010

Это работает с серверной частью MySQL

В форме ...

   <cfselect name="to" size="1" bind="cfc:cfcs.messages.getOrganisations()" bindonload="yes" value="organisationID" display="organisationName" required="Yes">
     </cfselect>

в КФК

<cffunction access="remote" name="getOrganisations" output="false" returntype="query" displayname="Get organisations list" hint="This method returns a list of organisations as a query.">
    <cfquery name="getOrganisations" datasource='myData'>

    SELECT organisationID, organisationName, acceptsReferral, metadataTemplate
    FROM organisations
    WHERE acceptsReferral
    ORDER BY organisationName ASC;

    </cfquery>
    <cfreturn getOrganisations>
</cffunction>

но если я попытаюсь

<cffunction access="remote" name="getOrganisations" output="false" returntype="query" displayname="Get organisations list" hint="This method returns a list of organisations as a query.">
    <cfquery name="getOrganisations" datasource='myData'>
    SELECT '0' AS organisationID, 'Select' AS organisationName, false AS acceptsReferral, 0 AS metadataTemplate
    FROM organisations
    UNION
    (SELECT organisationID, organisationName, acceptsReferral, metadataTemplate
    FROM organisations
    WHERE acceptsReferral
    ORDER BY organisationName ASC)

    </cfquery>
    <cfreturn getOrganisations>
</cffunction>

чтобы попытаться получить выбранную ведущую строку в запросе, я получаю эту ошибку AJAX в firebug «Ошибка сериализации JSON: невозможно сериализовать двоичные данные в JSON.»

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

Это работает ...

<cfselect name="attentionOf" size="1" bind="cfc:cfcs.messages.getOrganisationMembers({to})" bindonload="false" value="userID" display="name" required="No" queryPosition="below">
<option value="0">Select</option>
</cfselect>

... но если я пытаюсь передать DSN с привязанным полем, я получаю "barsing bind" из-за этого

<cfselect name="attentionOf" size="1" bind="cfc:cfcs.messages.getOrganisationMembers({to}, 'mySqlData')" bindonload="false" value="userID" display="name" required="No" queryPosition="below">
    <option value="0">Select</option>
</cfselect> 

1 Ответ

1 голос
/ 23 июня 2010

О, я думаю, это то, что вы хотите.

<cfset organisations = createObject("component", "cfcs.messages").getOrganisations()>

<cfselect name="to" query="organisations" 
          value="organisationID" display="organisationName"
          required="Yes" queryPosition="below">
    <option value="0">Select</option>
</cfselect>

Если вам действительно нужно работать с bind, попробуйте, если атрибут queryPosition работает. Если queryPosition не работает с bind, тогда вам нужно вставить лишнюю пустую строку. Может быть проще использовать union с Query of Queries .

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