【问题标题】:Database Query Syntax数据库查询语法
【发布时间】:2019-05-10 22:34:14
【问题描述】:

解决方案:我使用了 db 门面,DB::select() 来运行原始 sql 查询。

我有两个表用户(id,用户名,城市,国家)和朋友(id,user_id,friend_id,状态)。 “users”表存储用户信息,“friends”表存储当前登录用户的id,friend_id是向当前用户发送好友请求的用户id,状态为“received”。我想显示用户信息以向当前用户发送请求。我的数据库查询语法是否正确?如果我不使用嵌套子查询,我可以看到正确的输出。提前致谢!

我的数据库查询:

$friendrequests = DB::table('users')->select(['username','city','country'])->where('id',DB::table('friends')->select('friend_id')->where([['status','received'],['user_id',$user->id]]));

我的html:

@extends('layouts.master')

@section('title')
    Friend Requests
@endsection

@section('content')
    @include('includes.message-block')
    <section class="row requests">
        <div class="col-md-6 col-md-offset-3">
            <header><h3>Friend Requests</h3></header>
            <div class="requestlist">
                <header><h2>You have request from:</h2></header>
                @foreach($users as $user)
                    <p>Name: {{ $user->username }}<br />City: {{ $user->city }}<br />Country:{{ $user->country }}</p>
                    <div class="interaction">
                        //stuff here
                    </div>
                @endforeach
                <a href="{{ URL::previous() }}">Back</a>
            </div>
        </div>
    </section>
@endsection

路线:

Route::get('/friendrequests',[
        'uses' => 'FriendController@getFriendRequests',
        'as' => 'friendrequests',
        'middleware' => 'auth'
    ]);

控制器(如果我不使用嵌套子查询就可以工作):

public function getFriendRequests()
    {
        $user = Auth::user();
        $friendrequests = DB::table('users')
        ->select(['username','city','country'])
        ->where('id',
            DB::table('friends')->select('friend_id')->where([['status','received'],['user_id',$user->id]])->get())->get();

        return view('friendrequests',['users' => $friendrequests]);
    }

【问题讨论】:

  • 所以你想说让我得到他的朋友向他发送请求的用户?
  • 我想向约翰展示他收到的所有好友请求。关系的状态属性决定了两个用户是否是朋友。状态可以具有以下值之一:已发送、已接收、已接受和已阻止。
  • 不要编辑标题说它已解决。如果有人回答解决了它,请将其标记为正确(单击答案左侧的检查图标)。如果您自己解决,请帮助其他人发布解决方案(是的,您可以回答自己的问题)

标签: php html laravel


【解决方案1】:

你可以用“hasManyThrough”的方法解决这个问题。在您的用户模型中,您应该执行以下操作:

class User extends Model{

  //... your code here

  public function possibleFriends(){
    $this->hasManyThrough(User::class, Friend::class, 'friend_id', 'id')->wherePivot('status', 'received');
  }

}

更多详情请关注official docs

【讨论】:

    【解决方案2】:

    请尝试这可能会有所帮助

    $friendrequests = DB::table('users')
        ->select(['username','city','country'])
        ->whereIn('id', function($query) use($user) {
            $query->select('friend_id')
            ->from('friends')
            ->where('status', 'received')
            ->where('user_id', $user->id);
        })->get();
    

    【讨论】:

      猜你喜欢
      • 2021-01-21
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      • 2014-06-27
      • 2019-06-26
      • 1970-01-01
      • 2015-08-23
      • 2023-04-05
      相关资源
      最近更新 更多