Каков наилучший способ очистки списка, чтобы я мог повторно добавить элементы для ColdFusion 9 ORM? - PullRequest
1 голос
/ 19 августа 2011

Допустим, у меня есть сущность Store и Product, между которыми существует отношение многие ко многим, и оба являются постоянными CFC.В продуктах используется список идентификаторов продуктов из формы POST, что означает, что я должен сначала удалить все продукты.Какой лучший способ сделать это?До сих пор я пытался использовать ArrayNew(1):

<cfscript>
    store = entityLoadByPK("Store", FORM.id);

    // clear the products by assigning it to a new array
    store.setProducts(ArrayNew(1));

    // re-add the products
    for (id in productid)
    {
        product = entityLoad("Product", id);
        store.addProduct(product);
    }

    entitySave(store);
</cfscript>

И я пытался удалить продукты с помощью цикла:

<cfscript>
    store = entityLoadByPK("Store", FORM.id);

    // clear the products by removing them with a loop
    for (product in store.getProducts())
    {
        store.removeProduct(product);
    }

    // re-add the products
    for (id in productid)
    {
        product = entityLoad("Product", id);
        store.addProduct(product);
    }

    entitySave(store);
</cfscript>

Оба работают нормально, но есть лилучший способ справиться с этим?Или это не имеет значения, и оба будут делать то же самое за кулисами (а именно в SQL)?

1 Ответ

3 голосов
/ 19 августа 2011

Добавьте эти функции в store.cfc.При необходимости проверьте, существует ли сначала variables.products.

void function clearProducts()
{
    arrayClear(variables.products);
}

void function addProducts(required Array ps)
{
    for (var p in ps)
        ArrayAppend(variables.products, p);
}

Затем в слое контроллера

var hql = "from Product where id in (:productIDs)";
var products = ormExecuteQuery(hql, {productIDs=Form.productID});

if (!store.hasProduct())
    store.setProducts(products);
else
{
    store.clearProducts();
    store.addProducts(products);
}
...