我在查询数据库时遇到问题。
我的数据库如下:
表订单:
我已经建立了从订单到用户的模型关系。
public function user(){
return $this->hasOne('App\User','id','user_id');
}
我如何构建我的查询:
$query = Order::query();
$query->where('deleted', 0);
$fields = array('user' => ['username','dealername'], 'ordernumber', 'ordernumber_second');
foreach ($fields as $relation => $field) {
if (is_array($field)){
$query->whereHas($relation, function ($q) use ($field, $searchquery) {
$q->where(function ($q) use ($field, $searchquery) {
foreach ($field as $relatedField){
$q->orWhere($relatedField, 'like', "%{$searchquery}%");
}
});
});
} else {
$query->orWhere($field, 'like', "%{$searchquery}%");
}
}
$orders = $query->orderBy('created_at','desc')->get();
// return view ETC
这是有效的,唯一不起作用的是where子句:
$query->where('deleted', 0);
如果工作不正常,即使已删除,查询也会返回所有记录。
它可能与之前的orWhere有关,但我无法弄明白。
我尝试了什么:
where('deleted' , 0);
放在其他地方$query
嵌入其他地方任何帮助表示赞赏
起初,我认为更好的关系如下
public function user(){
return $this->belongsTo('App\User','user_id');
}
现在在查询中,您可以将代码重写为
$fields = array('user' => ['username','dealername'], 'ordernumber', 'ordernumber_second');
Order::where(function($query) use ($searchquery, $fields) {
foreach ($fields as $relation => $field) {
if (is_array($field)){
$query->whereHas($relation, function ($q) use ($field, $searchquery) {
$q->where(function ($q) use ($field, $searchquery) {
foreach ($field as $relatedField){
$q->orWhere($relatedField, 'like', "%{$searchquery}%");
}
});
});
} else {
$query->orWhere($field, 'like', "%{$searchquery}%");
}
}
})->where('deleted', 0)