Laravel雄辩的搜索功能

时间:2020-04-04 13:10:28

标签: laravel eloquent

我当前正在索引刀片文件上创建搜索功能。

我有不同的用户,每个用户在每个区域都有不同的商店。

我的用户模型:

    function area() {
    return $this->hasOne('App\Area');        
}

function role() {
    return $this->belongsTo('App\Role');
}

function reports() {
    return $this->hasMany('App\Report');
}

function stores() {
    return $this->hasManyThrough('App\Store', 'App\Area');
}

}

区域模型:

   function reports() {
    return $this->hasMany('App\Report');
}

function stores() {
    return $this->hasMany('App\Store');
}

 function user() {
    return $this->belongsTo('App\User');
}

商店型号:

    function district() {
    return $this->belongsTo('App\District');
}


function cluster() {
    return $this->belongsTo('App\Cluster');
}
function city() {
    return $this->belongsTo('App\City');
}

 function area() {
    return $this->belongsTo('App\Area');
}

我设法通过以下方式在管理员帐户(可以在其中看到所有商店)上使用该功能:

function index(Request $request) {
    if($request->has('search')) {
        $stores = Store::whereHas('city', function($query) use($request) {
        $query->where('name', 'like', '%' . $request->search . '%');
    })->orWhereHas('cluster', function($query) use($request) {
        $query->where('name', 'like', '%' .$request->search. '%');
    })->orWhere('name', 'like', '%' .$request->search. '%')
      ->orWhere('store_no', 'like', '%' .$request->search. '%')->paginate(10);  

    } else {
        $stores = Store::orderBy('created_at', 'desc')->paginate(10);
    }

    return view('/stores.store_list', compact('stores'));

我要对用户帐户执行的操作是:

function index(Request $request) {
    if($request->has('search')) {
        $id = Auth::user()->id;
        $query = $request->search;
        $user = User::find($id)->stores()->where('name', 'like', '%' . $query . '%')->paginate(10);


    } else {

        $id = Auth::user()->id;
       $user = User::find($id)->stores()->orderBy('created_at', 'desc')->paginate(10);
    }

    return view('/stores.store_list', compact('user'));

}

搜索时出现错误:

SQLSTATE [23000]:违反完整性约束:1052 where子句中的列“名称”不明确(SQL:从{{1}的stores内部联接areas的聚合中选择count(*) }。areas = idstores其中area_idareas = 6和user_id,就像%houston%和name一样。 stores为空)

有人能指出我正确的方向,让我知道我在这里想念的东西吗?谢谢!

1 个答案:

答案 0 :(得分:1)

出现错误时

Column 'some_column_name_here' in where clause is ambiguous...

表示存在与更多表相关联的复杂查询,其中至少有两个表的结构名称相同,并且在这种情况下,表名用于复杂查询(在某些情况下为WHERE ...){ {1}}为错误状态。 您始终可以使用WHERE {表名点列名}语法将语法指向确切的表含义(here)。