【问题标题】:How to use AND operator in Laravel Query?如何在 Laravel 查询中使用 AND 运算符?
【发布时间】:2019-07-10 17:26:35
【问题描述】:

选择用户

where id =! Auth::user->id 

// this prevents the query returning the current user logged in 

where Auth::user->value1 ,'=', 'value1'  ||   'value2' || 'value3' 

所以在英文中,找到一个用户名,其中 id 不等于当前登录的用户 id 并且经过身份验证的用户的 value1 列等于另一个用户的 value1 或 value2 或 value 3 列

下面是一个声明,我已经完成了它不能正常工作但是它在没有 OR 运算符的情况下也能工作

where(Auth::user()->recommendationWord1, '=' , 'value1') 

此语句是格式的示例,包含我尝试过的内容。

$Query = DB::table('users')
    ->select('username')
    ->where('id', '!=', Auth::user()->id)
    ->whereIn(Auth::user()->recommendationWord1 , '=', 'value1', '||' , 'value2', '||' , 'value3'
    ->get();

以下是我的 HTML 页面的代码以及我如何发布它

@foreach ($Query as $selectedUser)

    Code formatting<p> {{ $selectedUser->username}}</p>  

@endforeach  

【问题讨论】:

  • 检查here
  • recommendationWord1 列名吗?
  • @Tpojka 是的,它是包含用户表的列
  • 那么 @Davit 给你留下的变化是:'recommendationWord1' 而不是 Auth::user()-&gt;recommendationWord1whereIn($column_name, $array) 方法的第一个参数是要检查数组值的列的名称。检查文档。
  • 好的,还有包含列名的 $array 也只是检查你是否知道,我基本上只是比较列并找到那些相同的列

标签: php mysql laravel


【解决方案1】:

结构中的位置是-&gt;whereIn('attribute', ['val1', 'val2', ...]) 你的情况

DB::table('users')
    ->select('username')
    ->where('id', '!=', Auth::user()->id)
    ->whereIn(Auth::user()->recommendationWord1 , ['value1', 'value2', 'value3'])
    ->get();

【讨论】:

  • 下面是错误信息,找不到列:1054 Unknown column 'test1' in 'where clause' (SQL: select username from users where id != 7 and @987654326 @ in (value1, value2, value3)) 。 Auth::user()->recommendationWord1 返回 test1 这是正确的,因为这就是存储在该字段中的内容
  • 似乎没有返回或从字段value1、value2和value3中获取值
  • @John 参数应该是列的名称而不是值。 IE。 'recommendationWord1' 而不是 Auth::user()-&gt;recommendationWord1
【解决方案2】:

你试过分组参数吗?

$Query = DB::table('users')
        ->select('username')
        ->where('id', '!=', Auth::user()->id)
        ->where(function($query){
              $query->where(Auth::user()->recommendationWord1, '=', 'value1')
              ->orWhere(Auth::user()->recommendationWord1, '=', 'value2')
              ->orWhere(Auth::user()->recommendationWord1, '=', 'value3');
              })
         ->get();

查看文档中的示例:

有时您可能需要创建更高级的 where 子句,例如“where exists”子句或嵌套参数分组。 Laravel 查询构建器也可以处理这些。首先,让我们看一个括号内的分组约束示例:

DB::table('users')
            ->where('name', '=', 'John')
            ->where(function ($query) {
                $query->where('votes', '>', 100)
                      ->orWhere('title', '=', 'Admin');
            })
            ->get();
enter code here

如您所见,将闭包传递给 where 方法会指示查询构建器开始一个约束组。闭包将接收一个查询构建器实例,您可以使用它来设置应包含在括号组中的约束。上面的示例将生成以下 SQL:

select * from users where name = 'John' and (votes > 100 or title = 'Admin')

https://laravel.com/docs/5.7/queries#where-clauses

【讨论】:

  • 是的,这看起来很不错,看起来很整洁。但是,我正在寻找的主要内容基本上是重复执行 Auth::user()->recommendationWord1 = word1 、 word2 、 word3 等等
  • 如果你看下面的@Davit 答案,它会清楚地显示出来,但不能正常工作
  • 让我知道它是否有效。不确定您是否看到它,我用您的查询可能的解决方案编辑了我的答案
  • 是的,该解决方案确实有效,但我希望缩短它,这就是我现在的问题。所以像 1 orWhere 语句会很好但不重复 Auth::user 部分
  • 不确定是否可以实现..至少我不知道..如果您尝试将我的解决方案与@Davit 的解决方案结合起来怎么办?使用 whereIn 而不是 orWhere
【解决方案3】:

试试这个:

$users = User
            ::where('id', '<>', auth()->id())
            ->whereIn(auth()->user()->recommendationWord1, ['value1', 'value2', 'value3']) 
            ->get()

【讨论】:

  • "whereIn" array:3 [▼ 0 => "test1" 1 => "=" 2 => array:3 [▼ 0 => "word1" 1 => "word2" 2 = > "word3" ] ]
  • 那是该语句的输出,似乎没有得到 word1 或在我给 value1 等的示例中
  • 这句话的输出如何?你是怎么dd() 得到这个结果的?
  • 不抱歉,我的意思是说它在错误消息控制台输出中,我的错。
  • 我将在我的答案中发布我如何输出它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多