【问题标题】:Where orWhere Laravel 5.5 logical DB issueWhere orWhere Laravel 5.5 逻辑数据库问题
【发布时间】:2017-12-05 10:10:17
【问题描述】:

我很痛苦

这是我的助手

$friend_query = Friend::where([
        'user_id' => Auth::id(),
        'friend_id' => $friend_id,
        ])->orWhere([
        'user_id' => $friend_id,
        'friend_id' => Auth::id(),
        ])->first();

        
        

        $friendship = new stdClass();
        $friendship->exist = false;
        $friendship->accepted = false;

        if (! is_null($friend_query))
        {
        $friendship->accepted = $friend_query->accepted;
        $friendship->exist = true;
    }
        var_dump($friendship->exist);
        exit;
        return $friendship;

当我登录为 'user_id' => auth::id() - 一切都很好,但是当我登录为 'friend_id' 时,收到请求的人总是 var_dump 返回 true...这是我可以的第三天找不到解决方案。帖子中包含 DB 的照片。

【问题讨论】:

  • 不清楚这里有什么问题:p,你能用id的数字解释一下吗?
  • 您可以将您的朋友添加到您的朋友列表中,第一列是登录并发送邀请的user_id。第二列是我们发送邀请的friend_id。如果friend_id接受我们的邀请列接受更改值1

标签: database laravel where-clause helper


【解决方案1】:

当你想“分组”你的where 子句时,你应该传递一个closure,然后在其中执行你的条件。例如,您希望查询看起来像这样

SELECT * FROM friends WHERE (user_id = ? AND friend_id = ?) OR (user_id = ? AND friend_id = ?) 限制 1

那么这句话的雄辩版本应该是

$friend_query = Friend::where(function ($query) use ($friend_id) {
    $query->where('user_id', Auth::id())
        ->where('friend_id', $friend_id);
})->orWhere(function ($query) use ($friend_id) {
    $query->where('friend_id', Auth::id())
        ->where('user_id', $friend_id);
})->first();

【讨论】:

    【解决方案2】:

    谢谢你, 只是一点语法错误应该是

    ->orWhere(function ($query) {
    

    但有一个问题 - 未定义的变量:friend_id

    是这样的

    function friendship($friend_id){
    friend_query = Friend::where([
            'user_id' => Auth::id(),
            'friend_id' => $friend_id,
            ])->orWhere(function ($query) {
                                    $query->where([
                                            'user_id' => $friend_id,
                                            'friend_id' => Auth::id(),
                                            ]);
                                })
                        ->first();
    ... }
    

    【讨论】:

      【解决方案3】:

      试试这样:

      $friend_query = Friend::where([
                                      'user_id' => Auth::id(),
                                      'friend_id' => $friend_id,
                                      ])
                              ->orWhere(function ($query) use($friend_id) {
                                          $query->where([
                                                  'user_id' => $friend_id,
                                                  'friend_id' => Auth::id(),
                                                  ]);
                                      })
                              ->first();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-21
        • 1970-01-01
        • 2016-04-23
        • 2016-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-11
        相关资源
        最近更新 更多