Ich bin Codierung eine Abfrage:Laravel Escape-Zeichen in Query Builder
$result = \DB::table('order_items as oi')
->selectRaw(
'order_item_type as item_type,
order_item_id as item_id,
if(order_item_type = "App\\\Models\\\Book", oi.price, invoices.price) as price
)
nur beachten zu if
Aussage, ich habe zwei Escape-Zeichen oder Abfrage doesnt Spiel App\Models\Book
zu verwenden. wenn ich Ausgabeabfrage durch Laravel Debugger prüfe sein:
was passiert hier? entfernt laravel query builder einen Schrägstrich und entfernt mysql engine den zweiten Schrägstrich zur Laufzeit?
EDIT:
Aber woanders in der gleichen Abfrage habe ich eine where
-Klausel, die i ein Escape-Zeichen verwendet, und es funktioniert gut:
->leftjoin('books', function ($q) {
$q->on('q3.order_item_id', '=', 'books.id')
->where('q3.order_item_type', '=', 'App\\Models\\Book');
})
und der Ausgangsabfrageteil durch Laravel Debugger:
left join `books` on `q3`.`order_item_id` = `books`.`id` and
`q3`.`order_item_type` = 'App\Models\Book'
Kann mir jemand erklären, warum if
in i zwei Flucht c verwenden müssen haracter aber in join
nur ein Escape-Zeichen benötigt?
in der Tat wäre es kein Problem sein, wenn ich jede Escape-Zeichen in where
Query Builder Methode und schreiben verwenden nicht einmal den Code wie:
->leftjoin('books', function ($q) {
$q->on('q3.order_item_id', '=', 'books.id')
->where('q3.order_item_type', '=', 'App\Models\Book');
})
Haben Sie versucht, entweder 4 oder 2 Backslashes zu verwenden? 3 Backslashes sehen für mich falsch aus. –
@IvanYarych Dieses Verhalten ist nicht immer gleich, werfen Sie einen Blick auf EDIT. – alex