在查询数据库时遇到问题嵌套 - Laravel

时间:2018-03-06 10:15:00

标签: php mysql laravel laravel-5

我在查询数据库时遇到问题。

我的数据库如下:

表格订单:

  • ORDERNUMBER
  • secondordernumber
  • 删除
  • created_at
  • USER_ID
    • 表用户:
    • 用户名
    • dealername

我已经完成了从订单到用户的模型关系。

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嵌套在else

感谢任何帮助

1 个答案:

答案 0 :(得分:1)

首先,我认为更好的关系将如下所示

new

现在在查询中,您可以将代码重写为

public function user(){
    return $this->belongsTo('App\User','user_id');
}