Безопасно ли использовать DB :: select и другие в Laravel? - PullRequest
0 голосов
/ 11 декабря 2018

Запросы не всегда просты, и иногда мне нужно создать чистый SQL-запрос, построитель запросов также не подходит.При использовании DB :: select, подготовливаются ли переменные.

Будет ли в этом случае SQL-инъекция?

$mastersInCity = DB::select('SELECT
        master_user.master_id,
        masters.specialization,
        category_letter_master.category_letter_id AS master_letter,
        COUNT(*) AS count_in_city

        FROM master_user

        LEFT JOIN masters ON master_user.master_id = masters.id
        LEFT JOIN category_letter_master ON category_letter_master.master_id = master_user.master_id 

        WHERE ' . $chooiseId . ' = ' . $cityId . ' GROUP 

        BY master_user.master_id, master_letter');

Или, в этом случае, лучше использовать PDO напрямую, чтобы самостоятельно подготовить запрос вручную, верно?возможно

1 Ответ

0 голосов
/ 11 декабря 2018
$mastersInCity = DB::select('SELECT
    master_user.master_id,
    masters.specialization,
    category_letter_master.category_letter_id AS master_letter,
    COUNT(*) AS count_in_city

    FROM master_user

    LEFT JOIN masters ON master_user.master_id = masters.id
    LEFT JOIN category_letter_master ON category_letter_master.master_id = master_user.master_id 

    WHERE ? = ? GROUP 

    BY master_user.master_id, master_letter', [$chooiseId, $cityId]);

Это эквивалентно подготовленному утверждению.

Документы: https://laravel.com/docs/5.7/database#running-queries

Редактировать: я уверен, что это можно сделать с помощью eloquent просто, здесь нет ничего слишком сложного,Что-то вроде:

MasterUser::with(['master', 'master_letter'])->withCount()->where($chooiseId, $cityId)->get()
...