【问题标题】:laravel eloquent query orWherelaravel 雄辩的查询 orWhere
【发布时间】:2023-04-05 09:21:01
【问题描述】:

在普通 PHP 中我有一个 sql 查询

$q = 'shojib'; or $q = '01913711...'; or $q = 'House 23...';

select * from member where LoginName like '%$q%' or mobile like '%$q%' or  ConnectionAdderss like '%$q%' order by LoginName LIMIT 10;

我想用 laravel 写这个查询。 请帮帮我。

我在 laravel 成员模型中使用 SoftDeletingTrait

Member::where('zone', 'like', '%'.$key.'%')
            ->orWhere('login_name', 'like', '%'.$key.'%')
            ->orWhere('mobile', 'like', '%'.$key.'%')
            ->orWhere('name', 'like', '%'.$key.'%')
            ->orderBy('login_name')
            ->take('100')
            ->get();

但它会返回数据库中的所有数据,deleted_at 不为空;

它应该只返回那些deleted_at为空的数据;

【问题讨论】:

  • 您的查询应该只返回未被删除的项目。要退回已删除的项目,您必须使用onlyTrashedwithTrashed
  • 它返回所有已删除的数据而不是同时删除的数据。但它应该只返回未删除的数据

标签: php mysql laravel laravel-4 eloquent


【解决方案1】:

您应该编写如下查询

Member::onlyTrashed()->where('zone', 'like', '%'.$key.'%')
        ->orWhere('login_name', 'like', '%'.$key.'%')
        ->orWhere('mobile', 'like', '%'.$key.'%')
        ->orWhere('name', 'like', '%'.$key.'%')
        ->orderBy('login_name')
        ->take('100')
        ->get();

【讨论】:

    【解决方案2】:

    经过一段时间后,我找到了解决方案

    应该是

    $members = Member::where(function($query) use ($key)
            {
                $query->where('zone', 'like', '%'.$key.'%')
                        ->orWhere('login_name', 'like', '%'.$key.'%')
                        ->orWhere('contact_number', 'like', '%'.$key.'%')
                        ->orWhere('sms_comn', 'like', '%'.$key.'%')
                        ->orWhere('email', 'like', '%'.$key.'%')
                        ->orWhere('name', 'like', '%'.$key.'%');
            })
            ->take('100')
            ->orderBy('login_name', 'ASC')
            ->get();
    

    【讨论】:

      猜你喜欢
      • 2014-06-27
      • 2018-01-26
      • 2021-07-23
      • 1970-01-01
      • 2017-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多