Кодирую запрос:
$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
)
просто обратите внимание на инструкцию if
, мне нужно использовать два escape-символа, или запрос не соответствует App\Models\Book
. когда я проверяю выходной запрос отладчиком laravel, он:
select 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,...
что здесь происходит? Удаляет ли построитель запросов laravel одну косую черту, а затем движок mysql удаляет вторую косую черту во время выполнения?
РЕДАКТИРОВАТЬ:
Но где-то еще в том же запросе у меня есть предложение where
, в котором я использовал один escape-символ, и он отлично работает:
->leftjoin('books', function ($q) {
$q->on('q3.order_item_id', '=', 'books.id')
->where('q3.order_item_type', '=', 'App\\Models\\Book');
})
и часть выходного запроса отладчиком laravel:
left join `books` on `q3`.`order_item_id` = `books`.`id` and
`q3`.`order_item_type` = 'App\Models\Book'
Может ли кто-нибудь объяснить, почему в if
я должен использовать два escape-символа, а в join
нужен только один escape-символ?
на самом деле не было бы проблем, если бы Я даже не использую escape-символы в where
методе построения запросов и пишу код как:
->leftjoin('books', function ($q) {
$q->on('q3.order_item_id', '=', 'books.id')
->where('q3.order_item_type', '=', 'App\Models\Book');
})