Ich möchte schaffen so etwas wie:verschachtelte ODER-Bedingung mit Laravel Eloquent
select * from documents where 'chapter'=3 and 'section'=4 and ('title' like '%abc% OR 'desc' like %abc%);
Wie kann ich diese mit Eloquent tun? Ich habe versucht, die whereOr
Methode von Eloquent zu verwenden, aber das scheint nichts in dem generierten SQL zu tun. Aber selbst wenn, dann bin ich mir nicht sicher, ob mein aktueller Code sie so einbetten würde, wie ich es suche.
Manches, was ich habe:
$docSearch = DB::table('documents');
if ($chapter > 0) {
$docSearch->where('chapter', $chapter);
}
$existingManagementArray = Management::getAllManagementIDsAsArray();
if ($management_id > 0 && in_array($management_id, $existingManagementArray)) {
$docSearch->where('management_id', $management_id);
} else {
$docSearch->whereIn('management_id', $existingManagementArray);
}
if (strlen($term) > 0) {
//HELP! These don't seem to change the SQL
$docSearch->whereOr('title', 'like', "%$term%");
$docSearch->whereOr('desc', 'like', "%$term%");
}
DB::enableQueryLog();
$allFoundDocs = $docSearch->get();
dd(DB::getQueryLog());
Dies funktionierte gut. Kannst du ein bisschen beschreiben, was hier vor sich geht? Ich habe in den beredten Dokumenten nicht das Überschreiten einer Funktion gesehen. – zundi
@zundi, nun, Sie können closure (function) an 'where()' method übergeben und erweiterte Constrains zum übergeordneten 'where()' hinzufügen. Sie können mehrere Ebenen von geschachtelten 'where()' machen. Vergessen Sie nicht, 'use()' zu verwenden, wenn Sie einige Daten an den Abschluss übergeben möchten. –
Etwas Neues gelernt, danke Alexey – zundi