Sie können dies verwenden, um ODER zwischen 2 Bedingungen zu erstellen. Standardmäßig ist es UND
$query=db_select('users','u')->fields('u',array('uid','title','created','uid'));
$query->join('flag_content','fc' , 'u.uid = fc.content_id');
$db_or = db_or();
$db_or->condition('fc.fid', '5' , '=');
$db_or->condition('fc.uid', $uid , '=');
$query->condition($db_or);
$result = $query->execute()->fetchAll();
Es ist möglich, eine UND-Bedingung innerhalb von ODER zu haben. Angenommen, Sie haben 3 Bedingungen. Wenn Sie möchten, dass diese wie con1 UND con2 ODER con3 ist und in diesem Fall viele andere Fälle auftreten, können Sie db_und db_or verwenden, wenn Sie versuchen, db_or all zu verwenden Die Bedingungen innerhalb von db_or werden jetzt für den Fall benötigt, dass Sie möchten, und zwischen diesen können Sie db_ verwenden. Dies ist etwas mühsam, aber die Implementierung ist im folgenden Beispiel möglich
$query = db_select('work_details_table','wd');
$query->join('work_table','w','wd.request_id = w.request_id');
$query->fields('w',array('client_id'));
$query->fields('wd');
$query->condition('wd.request_id',$request_id);
if($status == 5 || $status == 6 || $status == 7){
$query->condition('wd.status',$status);
}elseif($user_type == 'writer'){
$query->condition('wd.writer_id',$user_id);
$db_or = db_or();
$db_and = db_and();
$db_and->condition('wd.status',2);
$db_and->isNull('wd.editor_id');
$db_or->condition('wd.status',4);
$db_or->condition('wd.status',1);
$db_or->condition($db_and);
$query->condition($db_or);
}else if($user_type == 'editor'){
$query->condition('wd.editor_id',$user_id);
$db_or = db_or();
$db_and = db_and();
$db_and->condition('wd.status',2);
$db_and->isNotNull('wd.editor_id');
$db_or->condition('wd.status',3);
$db_or->condition($db_and);
$query->condition($db_or);
}
//-----------------------------------------------------------------------------------------
$completed_sku = $query->execute()->fetchAll();
Auf diese Weise erhalten Sie eine Vorstellung davon, wie der Komplex und / oder die Bedingung in Drupal-PDO-Abfragen behandelt werden können.
db_or()
auch, wenn nur zwei Bedingungen von 5 Bedingungen, die UND-verknüpft sind, ODER-verknüpft werden müssen. Es ist nicht erforderlich$query->where()
, für diesen Fall zu verwenden.db_select()->condition($a)->condition($b)->condition(db_or()->condition($c)->condition($d))->condition($e)
; die resultierende Bedingung wäre$a AND $b AND ($c OR $d) AND $e
. Ich benutze Pseudocode.db_or()
ist eine Funktion, keine Methode;db_select()->condition()->db_or()
würde einen Fehler über eine nicht definierte Methode zurückgeben.Für Drupal 8 können Sie zB verwenden:
quelle