很抱歉,标题不清楚,我不确定该怎么写。
我正在创建用于过滤订单的搜索功能。每个订单都分配有一个用户ID或父ID(如果用户是子用户)(用于将订单与用户相关联)。
例如:userid,parentid,名称,产品,交付。
我的问题是:按名称搜索等将返回该名称的所有结果,无论您是否通过ID关联。
所以我基本上需要:其中userid或parentid =当前的userid 然后是搜索条件:或名称,产品或交货=搜索字词。
我目前正在通过检查所有搜索词匹配的数据库,然后在我的控制器中取消设置数据以仅输出与用户ID或父ID匹配的数据来进行此工作。有一个更好的方法吗?
订单控制器
$data = app('App\Http\Controllers\DbController')->getordersbysearch($search);
foreach($data as $row => $key){
if($key->Userid != $id || $key->parentid != $id){
unset($data[$row]);
}
else{
$key->Response = json_decode($key->Response);
}
dbcontroller
public function getordersbysearch($search){
$result = DB::table('orders')->where("Name", 'like', '%' . $search['search'] . '%')->orWhere("product", 'like', '%' . $search['search'] . '%')->orWhere("delivery", 'like', '%' . $search['search'] . '%')->get();
return $result;
}
答案 0 :(得分:1)
将ID发送给函数:
$data = app('App\Http\Controllers\DbController')->getordersbysearch($search, $id);
然后更改您的功能以使用此ID:
public function getordersbysearch($search, $id) {
$result = DB::table('orders')
->where(function($q) use ($id) {
$q->where('parent_id',$id)
->orWhere('user_id',$id);
})->where(function($q) use ($search) {
$q->where("Name", 'like', '%' . $search['search'] . '%')
->orWhere("product", 'like', '%' . $search['search'] . '%')
->orWhere("delivery", 'like', '%' . $search['search'] . '%');
})->get();
return $result;
}
在我看来,这种控制器不应该存在。 “ DbController”应该是服务或模型等不同的层。