Не работает db_update

Главные вкладки

Аватар пользователя Decadent42 Decadent42 28 ноября 2015 в 13:39

Создал модуль, который при запуске cron обновляет данные в таблице с данными поля:

<?php
function mymodule_cron(){

//Подключаемся к таблице с данными для замены
    
$query db_select('potencial''p');
        
$query
            
->fields('p', array('href_activ''title''href_noactiv'));
    
$resultPotencial $query->execute();

//Подключаемся к таблице записей которые нужно заменить
    
$queryActiv db_select('field_data_field_myfield''f');
    
$queryActiv
            
->condition('field_myfield_class''noactiv')
            ->
fields('f', array('field_myfield_href''field_myfield_title''field_myfield_class'));
    
$resultDataField $queryActiv->execute();

//При совпадении nid (href_noactiv и field_myfield_href) заменяем данные
    
foreach($resultPotencial as $p){
        foreach(
$resultDataField  as $f){
            if(
$p->href_noactiv == $f->field_myfield_href){
                
db_update('field_data_field_myfield')
                    ->
fields(array('field_myfield_href' => $p->href_activ'field_myfield_class' => 'activ''field_myfield_title' => $p->title))
                    ->
condition('field_myfield_href'$f->field_myfield_href)
                    ->
execute();
            }
        }
    }
}
?>

При тестировании модуля первая запись в таблице potencial успешно заменилась, но последующие перестали реагировать, то ли я что то изменил и забыл (хотя логика в действиях вроде правильная), то ли с самого начала всё сделал неправильно, хотя ещё раз - первая запись в potencial обновила data_field но больше не хочет. И ещё db_update обновляет сразу несколько записей в data_field. Может из-за этого?

Комментарии

Аватар пользователя goodboy goodboy 28 ноября 2015 в 17:12

Видимо, нельзя так делать. Попробуйте внутри цикла не делать db_update, а собирать данные для update в массив:

$update[] = array('href1' => $f->field_myfield_href, 'href2' => $p->href_activ, 'title' => $p->title);

А потом пройтись еще раз в цикле по этой переменной и сделать db_update

Аватар пользователя Decadent42 Decadent42 28 ноября 2015 в 22:22

А можно как-нибудь без применения db_update изменить заголовок ноды? Пробовал:

<?php
$nid 
$p->href_noactiv;
$node node_load($nid);    /* Загружаем ноду с идентификатором */
$node->title '[Предлагается к удалению]'.$p->title;
node_save($node);       
?>
Аватар пользователя goodboy goodboy 28 ноября 2015 в 20:38

Можно и через node_load/node_save действовать, но это более "дорогой" подход в плане производительности.

Код в принципе правильный, только проверяйте $node после node_load():

if ( $node ) {
....
}

href_noactiv - это же не nid, подозреваю что $node будет пустым

Аватар пользователя Decadent42 Decadent42 29 ноября 2015 в 0:49

Весь вечер бился, единственное, что изменил так это кодировку (почему-то стояла windows или что-то вроде того) на utf без BOM, и всё заработало - и db_update и node_save(). Видимо всё дело было в кодировке. В любом случае огромное спасибо за помощь!!!