Использование substr для одного из столбцов базы данных на контроллере Laravel - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь использовать substr для одного из столбцов в таблице.Но он возвращает эту ошибку: Method Illuminate\Support\Collection::raw does not exist.

Мой контроллер находится здесь:

public function search(Request $request)
    {
        $q = $request->q;
        if ($q !== null && trim($q) !== ""){//here

            $estates = \DB::table('estates')
                ->where("name","LIKE", "%" . $q . "%")
                ->orWhere("address","LIKE", "%" . $q . "%")
                ->orWhere("company_name","LIKE", "%" . $q . "%")
                ->orderBy('price')->get()
                ->raw(substr('address', 1, 4))->get();

            if(count($estates) > 0){
                return view("search", compact('estates'))->withQuery($q);
            }

        }

        $estates = array();
        return view("search", compact('estates'))->withMessage("No Found!");
    }

Я думаю, что эта строка не совсем работает?raw(substr('address', 1, 4))->get(); Есть идеи, чтобы решить эту проблему?Спасибо!

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

использовать DB :: raw ()

   $estates = \DB::table('estates')
            ->where("name","LIKE", "%" . $q . "%")
            ->orWhere("address","LIKE", "%" . $q . "%")
            ->orWhere("company_name","LIKE", "%" . $q . "%")
            ->orderBy('price')
            ->select(\DB::raw("SUBSTR('address', 1, 4))")->get();
0 голосов
/ 12 октября 2018

Вы не можете использовать ->raw() как функцию, потому что она просто не существует.На основании вашего запроса вы хотите select Substr из Address.В этом случае вы бы использовали что-то вроде этого:

$estates = \DB::table('estates')
            ->where("name","LIKE", "%" . $q . "%")
            ->orWhere("address","LIKE", "%" . $q . "%")
            ->orWhere("company_name","LIKE", "%" . $q . "%")
            ->orderBy('price')->get()
            ->select(
               'states.*',
               \DB::raw('SUBSTR(`address`, 1, 4) as short_address')
            )->get();

и получили бы к нему доступ следующим образом:

$estates->first()->short_address
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...