首页 > 解决方案 > Laravel 雄辩的搜索功能

问题描述

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

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

我的用户模型:

    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:从stores内部联接areas中选择计数(*)作为聚合areasid= stores.area_id其中areas. user_id=6 和name类似 %houston% 和stores.deleted_at为空)

谁能指出我正确的方向,让我知道我在这里缺少什么?谢谢!

标签: laraveleloquent

解决方案


当你有错误时

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

这意味着存在与更多表相关联的复杂查询,其中至少有两个在其结构中具有相同的表名,并且该表名用于复杂查询(在某些 ON、WHERE ...)中,在这种情况下WHERE作为错误状态。您始终可以使用table_name.column_name{table name dot column name} 语法将语法指向确切的表含义(模棱两可)。


推荐阅读