首页 > 解决方案 > 使用 substr 作为 Laravel 控制器上的数据库列之一

问题描述

我正在尝试将 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(); 任何想法来解决这个问题?谢谢!

标签: phpmysqllaravel

解决方案


您不能->raw()用作函数,因为它根本不存在。根据您的查询,您希望selectAddress. 在这种情况下,你会使用这样的东西:

$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

推荐阅读