我当前正在索引刀片文件上创建搜索功能。
我有不同的用户,每个用户在每个区域都有不同的商店。
我的用户模型:
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
=id
。stores
其中area_id
。areas
= 6和user_id
,就像%houston%和name
一样。stores
为空)
有人能指出我正确的方向,让我知道我在这里想念的东西吗?谢谢!
答案 0 :(得分:1)
出现错误时
Column 'some_column_name_here' in where clause is ambiguous...
表示存在与更多表相关联的复杂查询,其中至少有两个表的结构名称相同,并且在这种情况下,表名用于复杂查询(在某些情况下为WHERE ...){ {1}}为错误状态。
您始终可以使用WHERE
{表名点列名}语法将语法指向确切的表含义(here)。