gpt4 book ai didi

php - 在查询数据库时嵌套 where 子句时出现问题 - Laravel

转载 作者:行者123 更新时间:2023-11-29 02:42:14 27 4
gpt4 key购买 nike

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

我的数据库如下:

表格顺序:

  • 订单号
  • 二阶编号
  • 已删除
  • 创建于
  • 用户名
    • 表用户:
    • 用户名
    • 经销商名称

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

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);

无法正常工作,查询返回所有记录,即使 deleted 为 true..

这可能与之前的 orWhere 有关,但我无法弄清楚。

我尝试了什么:

  • where('deleted' , 0); 放在其他地方
  • $query 嵌套在 else 中

感谢任何帮助

最佳答案

起初,我认为更好的关系如下

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)

关于php - 在查询数据库时嵌套 where 子句时出现问题 - Laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49128336/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com