Используйте переменную в MySQL, как предложение в построителе запросов Laravel - PullRequest
0 голосов
/ 17 февраля 2019

$key если переменная может быть пустой или что-то в этом роде.

var key='"<?php echo $_REQUEST['key']; ?>"';

затем отправить в ajax данные

"ajax": {

          "url": "{{asset("try")}}",
          "type": 'POST',
          "dataType": 'json',
          "async": true,
          "data": {
             key : key,
            },
}

Попытка Controller

public function try(Request $request){
    $key=$request->key;

    DB::query()
    ->select('A.id','A.upper_p_id','A.key')
    ->from('users as A')
    ->leftjoin('products as B', function($join) {
        $join->on('A.ID', '=', 'B.p_id');
      })
    ->groupBy('A.id','A.upper_p_id','A.key')
    ->where('A.key', 'LIKE', '%'.$key.'%');
    ->get()

    return $result;
}

Я получил выражение ошибки из инструмента отладки запросов?

LIKE '%\"\"%' 

Но если я использую

  ->where('A.n_geography','LIKE', '%'.''.'%');

Это правильное предложение от инструмента отладки запросов.

LIKE  '%%'

Ответы [ 4 ]

0 голосов
/ 17 февраля 2019

Вы двойные кавычки key.Предлагаемый способ совместного использования переменных PHP как переменных JS состоит в том, чтобы кодировать их в JSON, например:

var key= {!! json_encode(request()->input('key')) !!};

Обратите внимание, что в коде JS не требуется никаких дополнительных кавычек, поскольку действительный JSON также является допустимой переменной JS.

Также обратите внимание, что, поскольку вы используете Laravel, рекомендуется использовать разметку блейдов и помощник request() для доступа к параметрам запроса

0 голосов
/ 17 февраля 2019

Чтобы предотвратить внедрение SQL, лучше не объединять значение напрямую, а передавать его как параметр, поэтому попробуйте следующее:

$key = $request->key;

...
->whereRaw('A.key like ?', ['%' . $key . '%']);

И в вашем JS:

var key='<?php echo $_REQUEST['key']; ?>';
0 голосов
/ 17 февраля 2019

Если вы пытаетесь получить ключ из запроса, в идеале вам не следует использовать $ _GET o $ _POST.

public function getData(Request $request){
    $key = $request->key;

    $records = DB::table('users')
    ->leftJoin('products', 'users.id', '=', 'products.p_id')
    ->groupBy('users.id','users.upper_p_id','users.key')
    ->where('users.key', 'LIKE', '%'.$key.'%')
    ->select('users.id','users.upper_p_id','users.key')
    ->get();

    return response()->json($records, 200);

}

Однако, если переменная key является переменной javascript, вы не сможете напрямуюиспользовать в контроллере.Вам нужно как-то передать его в параметре маршрута или с помощью ajax-запроса.

Во-вторых, если вы можете добавить условное when, что, если $ key присутствует, тогда используйте только предложение where:

public function getData(Request $request){
    $key = $request->key;

    $records = DB::table('users')
    ->leftJoin('products', 'users.id', '=', 'products.p_id')
    ->groupBy('users.id','users.upper_p_id','users.key')
    ->when($key, function($q) use($key){
        return $q->where('users.key', 'LIKE', '%'.$key.'%');
    })
    ->select('users.id','users.upper_p_id','users.key')
    ->get();

    return response()->json($records, 200);

}
0 голосов
/ 17 февраля 2019

Ну что ж - вы поместили двойные кавычки в переменную key ... Так что все делается правильно: -)

...