如何巧妙地编写雄辩的查询?

时间:2017-07-23 16:40:27

标签: php laravel eloquent

没有什么比看起来不优雅的代码更让我烦恼了。这是我向laravel过渡的原因之一。使用laravel我可以有效地编写我的应用程序。但是,Eloquent Models或Query Builder形式的SQL仍然让我眼前一亮。

Eloquent适用于单行查询:

$findUsername = User::find(Auth::id())->username;

但努力整齐地代表更复杂的查询。

示例1:

$lobbyid = Request::get('lobbyid');

// I personally prefer single line variables for neatness
$checkOnline = UserLobbyInfo::select('id', 'online')->where([
    ['userid', '=', Auth::id()],
    ['lobby', '=', $lobbyid]
])->first();

if (count($checkOnline) && $checkOnline->online == "1") { 
    // if the user is online make sure you send a leave message
    // we do not have to actually set online to 0 because we are removing the whole record
    $this->send([ "lobby" => $lobbyid ])->leave();
}

示例2:

return UserLobbyInfo::join('lobbies', 'lobbies.id', '=', 'user_lobby_info.lobby')
            ->select('user_lobby_info.userid',
                     'user_lobby_info.approved',
                     'user_lobby_info.invitedby',
                     'lobbies.id AS lobbyid', 
                     'lobbies.title')
            ->where([
                    ['user_lobby_info.userid', '=', Auth::id()],
                    ['user_lobby_info.approved', '=', 2]
                ])
            ->orWhere(function ($query) {
                $query->where('lobbies.owner', '=', Auth::id())
                      ->where('user_lobby_info.approved', '=', 1);
            })
            ->get();

这篇文章可能将我描述为过度挑剔或者ocd,但我的目的是写出我能做的最好的代码。这是学习曲线的一部分。我只想提出一些风格的想法,以便在我的代码中包含这些查询时自然流动。

我已经想到的事情:

  • 全部查询
  • 将查询分成单独的函数

1 个答案:

答案 0 :(得分:-2)

你必须学习如何使用多对多关系,尝试使用elequant比查询构建器更容易