조인이있는 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()/ etc 가있는 인터페이스를 구현하지 않습니다 . 메서드를 사용하여 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 December

2
DBTNG가 기존 클래스에서 필요한 쿼리를 수행 할 수없는 경우 사용하는 것이 허용됩니다 db_query(). 문서에 단단히 고정하려면 하위 쿼리가있는 조건이 옵션이됩니다. 당신이 말한대로, 그것은 덜 확대됨 것 나에게 직선 SQL 쿼리 사용하는 것보다 어떤 '더 나은'하락하지 않습니다
클라이브

이것은 Drupal 8에서도 해당되는 것으로 보이며 Update어떤 join기능도 구현하지 않으므로이 경우 에는 일반 쿼리를 사용해야합니다.
David Thomas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.