【问题标题】:Drupal 7 form_alter broke ajax form with SQL IN arrayDrupal 7 form_alter 使用 SQL IN 数组打破了 ajax 表单
【发布时间】:2013-04-04 09:42:33
【问题描述】:

我的模块中form_alter 中有下一个代码:

$query = db_select( 'field_data_field_product_photos', 'p' );
$query->addField( 'p', 'entity_id', 'pid' );
$query->addField( 'f', 'uri', 'uri' );
$query->join('file_managed', 'f', 'p.field_product_photos_fid=f.fid' );
$query->condition('p.entity_id', $products_nids, 'IN' );
$query->condition('p.delta', 0, '=' );
$result = $query->execute();

但是在表单中点击其他单选时,ajax返回错误

$products_nids 就像array(10,14) 一样的数组。如果放置 array(10,14) 而不是 $products_nids 它将正常工作。但是$products_nids 是动态生成的。

有人知道该怎么做吗?

附:错误必须是field_data_field_product_photos,而不是field_revision_field_product_photos

【问题讨论】:

    标签: ajax drupal drupal-7


    【解决方案1】:

    看看生成的 SQL:

    ...WHERE (p.entity_id IN ())...
    

    很简单,$product_nids 在您将其传递给查询时为空,这会产生如上所述的无效 SQL。为避免这种情况,要么修复阻止 $product_nids 正确填充的任何错误,要么添加一些错误检查:

    if (!empty($product_nids)) {
      $query->condition('p.entity_id', $products_nids, 'IN' );
    }
    

    【讨论】:

    • $product_nids 不为空 - 我检查一下。例如在某个节点$product_nids == array(10, 14) 上。如果在查询中输入array(10, 14),一切都会很好。
    • 对不起,是——看看产生的SQL,不会撒谎
    • 好吧,你刚刚证明了我的观点 :) 如果它适用于静态数组,那么你肯定知道 $product_nids 要么是空数组,要么不是全部。就像我说的,SQL 不能只看生成的查询字符串
    • 我很抱歉,你是对的 - 我收到了不好的 nid。 ajax 回调无法接收它。这就是为什么$product_nids 是空的。谢谢帮助)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    相关资源
    最近更新 更多