Php 如何巧妙地写出有说服力的问题?

Php 如何巧妙地写出有说服力的问题?,php,laravel,eloquent,Php,Laravel,Eloquent,没有什么比看起来不优雅的代码更让我讨厌的了。这也是我向拉威尔过渡的原因之一。使用laravel,我可以高效、非常好地编写我的应用程序。然而,以雄辩的模型或查询生成器形式出现的SQL仍然让我目不暇接 雄辩适合单行查询: $findUsername = User::find(Auth::id())->username; 但是很难准确地表示更复杂的查询 例1: 例2: return UserLobbyInfo::join('lobbies', 'lobbies.id', '=', 'user_

没有什么比看起来不优雅的代码更让我讨厌的了。这也是我向拉威尔过渡的原因之一。使用laravel,我可以高效、非常好地编写我的应用程序。然而,以雄辩的模型或查询生成器形式出现的SQL仍然让我目不暇接

雄辩适合单行查询:

$findUsername = User::find(Auth::id())->username;
但是很难准确地表示更复杂的查询

例1:

例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();
这篇文章可能将我描述为过度挑剔或强迫症,但我的目的是尽可能编写最好的代码。这是学习曲线的一部分。我只想在代码中加入一些风格上的想法,以改进这些查询的自然流程

我已经想到的事情:

使所有查询都是单一的 将查询分离为单独的函数
您必须学习如何使用多对多对一关系,并尝试使用elequant比query builder更简单

在示例2中,您使用的是query builder,而不是雄辩的。了解如何使用关系,您的代码将更加优雅。User::findAuth::id->username;关于Auth::user->username呢?我建议,如果可能的话,隐藏作用域中的位置并加入关系。还要记住点语法。然后,您的查询将如下所示:使用[lobbies.userid,lobbies.approved->forActiveUserAuth::id;粒度是一个关键。
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();