で文字をエスケープLaravel私は、クエリをコーディングしています:は、クエリビルダ
$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
)
はちょうど私がエスケープ文字やクエリdoesntのマッチApp\Models\Book
を使用することを抱えている、if
ステートメントに注意してください。私が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クエリビルダはスラッシュを1つ削除してから、mysqlエンジンは実行時に2番目のスラッシュを削除しますか?
EDIT:
しかし、どこか別の場所に同じクエリで私はエスケープ文字を使用where
句を持っており、それが正常に動作します:
->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
に私はエスケープcを使用しなければならない理由を誰が説明することができますharacterですが、join
のみエスケープ文字が必要ですか?
->leftjoin('books', function ($q) {
$q->on('q3.order_item_id', '=', 'books.id')
->where('q3.order_item_type', '=', 'App\Models\Book');
})
4つまたは2つのバックスラッシュを使用しようとしましたか? 3つのバックスラッシュが間違って見えます。 –
@IvanYarychこの動作は常に同じではなく、EDITを見てください。 – alex