db_update foutmelding innerjoin

Daar er geen profile2_presave functie bestaat probeer ik via een db_update de waarde van een veld aan te passen, en tja... lukt niet echt. Indien ik geen innerjoin gebruik werkt het updaten perfect (dus rechtstreeks het veld aanspreken en updaten)... maar anders :-), zie code :


global $user;
$uid = $user->uid;

$query = db_update('table_X')
->innerjoin('table_Y','tY','tY.pid=table_X.eid')
->fields('table_X', array(
'tX_field_a' => 99999,
))
->condition('tY.uid', $uid ,'=')
->execute();

dit zou het volgende moeten voorstellen


UPDATE table_X
INNER JOIN table_Y
ON table_X.eid = table_Y.pid
SET table_X.tX_field_a = 99999
WHERE table_Y.uid = $uid

EDIT: Net gelezen dat db_update geen 'join' ondersteund? Klopt dit?
En een dubbele condition werkt precies ook niet (ik zal wrs iets fout doen, morgen nog eens testen)
Of zie ik iets over het hoofd?

Drupalversie: 
7.x
Auteur: 
redjane
Door redjane op 26 september, 2011 - 12:42

Ondertussen opgelost (hopelijk tijdelijk aangezien het geen mooie oplossing is) door gebruik te maken van twee afzonderlijke queries. Eerst een select (met een fetchassoc) dan een update met de value van de fetchassoc.
Het zou mooi zijn mocht het in 1 query lukken.

EDIT: aha, db_or() en db_and() kunnen we gebruiken in de conditions.
Pff... ik ben die db-"special object-oriented API" beetje beu aan het worden, is het echt aangeraden om deze te gebruiken?

Bookmark and Share

Drupal is een geregistreerd merk van Dries Buytaert. | Powered by Pantheon.

Drupal.be/Drupal.nl is de website van de Nederlandstalige Drupalgemeenschap.

onomatopee