Drupal 7 form_alter用SQL IN数组打破了ajax表单

时间:2013-04-04 09:42:34

标签: ajax drupal drupal-7

我的模块中的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返回错误

enter image description here

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

有人知道该怎么做吗?

P.S。错误必须是field_data_field_product_photos,而不是field_revision_field_product_photos

1 个答案:

答案 0 :(得分:1)

看看生成的SQL:

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

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

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