SUBSTR в построителе запросов laravel возвращает ошибку - PullRequest
0 голосов
/ 15 октября 2019

У меня есть запрос, использующий построитель запросов и красноречивый с функцией mysql substr, и моя проблема в том, что он возвращает ошибку A non-numeric value encountered. Может кто-нибудь знает, каково решение этого? Спасибо.

Мои данные 1-Course 101, и я хочу получить только Course 101, игнорируя часть 1- в базе данных.

Запросы, которые я пытался

Мой красноречивый запрос

 $items2 = Course::where('school_id','=',Auth::user()->school_id)
      ->where(\DB::raw('SUBSTR(name, LOCATE('-', name) +  1)'))
      ->where('status','=',1) 
      ->get();

Конструктор запросов

 $items3 = \DB::table('courses')
                  ->where('status', '=', 1)
                  ->where('school_id','=',Auth::user()->school_id)
                  ->where(\DB::raw('SUBSTR(name, LOCATE('-', name) +  1)'))
                  ->get();

Он по-прежнему возвращает ошибку A non-numeric value encountered.

Ответы [ 4 ]

2 голосов
/ 15 октября 2019

Попробуйте это.

Проблема в конкатенации строк. в вопросе DB:raw было

\DB::raw('SUBSTR(name, LOCATE('-', name) +  1)')

'-' разрывает строку. это была проблема.

 $items2 = Course::select(\DB::raw("SUBSTR(name, LOCATE('-', name) +  1)"))
           ->where('school_id','=',Auth::user()->school_id)
           ->where('status','=',1) 
           ->get();

или

$items2 = Course::selectRaw("SUBSTR(name, LOCATE('-', name) +  1)")
               ->where('school_id','=',Auth::user()->school_id)
               ->where('status','=',1) 
               ->get();
1 голос
/ 15 октября 2019

Почему бы не использовать карту для форматирования имени:

Надеюсь, я получу ваше мнение, используя этот код.

Course::where('school_id','=',Auth::user()->school_id)
    ->where('status','=',1) 
    ->get()->map(function ($data) {
        $name = explode("-", $data->name); // 1-Course 101 - ['1', 'Course 101']
        return [
          'name' => $name[1]
        ];
  })
1 голос
/ 15 октября 2019

не содержит числовое значение?

Должен измениться \ DB :: raw ('SUBSTR (имя, LOCATE (' - ', имя)) + 1 );

1 голос
/ 15 октября 2019
$items2 = Course::select(\DB::raw("SUBSTR(name, LOCATE('-', name) +  1) as name"))
       ->where('school_id','=',Auth::user()->school_id)
       ->where('status','=',1) 
       ->get();

используйте select, чтобы получить определенный столбец, и не забудьте присвоить этому столбцу псевдоним, чтобы быть уверенным. Используемый вами запрос извлекает все данные из базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...