db_update () з приєднується


9

Чи є спосіб db_update()для наступного запиту?

UPDATE field_data_field_TEST as ft 
left join node as n on ft.entity_id = n.nid
set n.type='test'
where n.type='foo'

Я спробував використовувати, db_update()->join();але це не вийшло.

Відповіді:


12

db_update()не реалізує жодних інтерфейсів, які мають join()/ innerJoin()/ тощо. методи, тому я думаю, що ви затрималися з використанням db_query()і записом рядка запиту вручну.

$sql = "
  UPDATE field_data_field_TEST as ft 
  left join node as n on ft.entity_id = n.nid
  set n.type = :type1
  where n.type = :type2";

$args = array(':type1' => 'test', ':type2' => 'foo');
db_query($sql, $args);

це рішення, але в документації на Drupal написано: "Не використовуйте цю функцію для запитів INSERT, UPDATE або DELETE. З ними слід обробляти через db_insert (), db_update () та db_delete () відповідно." тому я думаю, що, можливо, реалізація підзапросу була б меншою продуктивністю, але правильніше. Як ти гадаєш ?
ivan

2
Я б взяв цю документацію з дрібкою солі ... якщо DBTNG не може виконати потрібний запит із наявним класом, це цілком прийнятно для використання db_query(). Якщо ви хочете жорстко дотримуватися документації, тоді переконайтесь, що умова з підзапитом буде варіантом. Але, як ви кажете, це було б менш ефективно, і для мене не вийшло нічого кращого, ніж використання прямого sql запиту
Clive

Зауваживши, що це також є випадком у Drupal 8, Updateне реалізує жодних joinфункцій, все ж потрібно використовувати загальний запит для цього випадку.
Девід Томас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.