laravel - 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
中选择计数(*)作为聚合areas
。id
=stores
.area_id
其中areas
.user_id
=6 和name
类似 %houston% 和stores
.deleted_at
为空)
谁能指出我正确的方向,让我知道我在这里缺少什么?谢谢!
解决方案
当你有错误时
Column 'some_column_name_here' in where clause is ambiguous...
这意味着存在与更多表相关联的复杂查询,其中至少有两个在其结构中具有相同的表名,并且该表名用于复杂查询(在某些 ON、WHERE ...)中,在这种情况下WHERE
作为错误状态。您始终可以使用table_name.column_name
{table name dot column name} 语法将语法指向确切的表含义(模棱两可)。
推荐阅读
- reactjs - React App:Windows + Microsoft Edge 95 稳定版导致白屏显示“Rangeerror:超出最大调用堆栈大小”
- ros - BNO055 通过 rosserial 用 a4988 驱动器控制 Nema 17 步进电机
- python - 我如何检查有多少成员在线 discord.py
- python - 仅在填写整个单词时才断言
- amazon-web-services - 从 AWS 迁移到 Azure 时性能不佳
- python - 从类的可变数组继承时,有没有办法让 Python 代码完成工作?
- python - 在pygame中检测碰撞
- visual-c++ - 哪个类型库托管 stdDataFormat?
- python - 尝试使用 numpy.ndarray 时,Tensorflow Convert To Tensor 抛出异常
- bash - 如何以列的最后一个数字的增量连接文件的内容