我正在使用Laravel Spark开发一个APIendpoint。
此endpoint返回给定团队及其用户。
// in App\Team
public function users()
{
return $this->belongsToMany(
'App\User', 'team_users', 'team_id', 'user_id'
)->withPivot('role');
}
但是,我希望通过用户模型上的方法对这些用户进行排序。
在我的应用程序\用户模型上,我有一个方法:
public function currentQueueLength()
{
returns an integer based upon the users current appointments,
}
是否有任何方法可以返回用户关系,但根据该方法的结果对用户进行排序?
您可以通过如下方式对用户进行排序来实现这一点:
Team::with('users')
->all();
$team->users->sort(
function ($user1, $user2) {
return $user1->currentQueueLength() - $user2->currentQueueLength();
}
);
有关排序的更多信息:若要按升序排序,请在第一项小于第二项时返回-1。因此,您可以使用:
return $user1->currentQueueLength() < $user2->currentQueueLength() ? -1 : 1;
若要按降序排序,当第一项小于第二项时,返回1。
return $user1->currentQueueLength() < $user2->currentQueueLength() ? 1 : -1;
如果它是用户模型中的一个字段,您可以这样做:
$teams = Team::with(['users' => function ($q) {
$q->orderBy('Field', 'asc'); // or desc
}])->all();
就财产而言:
// asc
$team->users->sortBy('userProperty');
// desc
$team->users->sortByDesc('userProperty');
希望有帮助:)
如果将current\u queue\u length
作为属性添加到User
模型中,则可以按此属性排序。
您可以通过将属性添加到$appends
数组并创建访问器来添加该属性:
class User extends Model {
protected $appends = ['currentQueueLength'];
public function getCurrentQueueLengthAttribute()
{
return $this->currentQueueLength();
}
}
这个问题值得一提:在加载时向Laravel/Elount模型添加自定义属性?
然后在团队中
可以添加如下方法:
class Team extends Model {
public function users()
{
return $this->belongsToMany(
'App\User', 'team_users', 'team_id', 'user_id'
)->withPivot('role');
}
public function usersByCurrentQueueLength()
{
return $this->users->orderBy('current_queue_length');
}
}
正如我在评论中提到的,这种方法的问题是,它听起来像currentQueueLength()
是一个代价高昂的操作(根据您的评论),因此理想情况下,您可以有条件地执行此操作,但我不确定如何执行此操作!您可能需要重新考虑实现currentQueueLength()
的方法,这可能会为您构造此查询的方式提供更多选项。
我被一个简单的任务困住了。我只需要这通电话的结果 其中,是一个模型。我试过这个 但它不起作用。从表中获取所有数据并对其进行排序的更好方法是什么?
我在使用laravel雄辩的ORM时遇到了一个问题。 基本上,我正在获取与用户相关的帖子,以及他的评论,但是,我正在尝试集成某种分页(我一次只想取5个帖子)。 而使用跳过方法,我总是得到以下laravel错误: 方法skip不存在。 这是我实际使用的代码片段。 有人能给我任何帮助吗? 帐户模型检索与用户相关的帖子模型(关系),但是,我想一次只收到5个帖子,用于基于ajax的请求。
亲爱的人们。 最近,我开始更多地使用Laravel模型和雄辩的关系,而不是编写原始查询。 问题:我无法访问表“roles”的任何字段变量。$user->roles->role_name或role_description。
我正在尝试使用Laravel雄辩的模型查询多个表,这些模型具有一对一、一对多和多对多的关系。 我有一个表,一个表,一个表和一个透视表。 每个表单有一个品牌和一个用户: 品牌没有任何外键: 用户没有任何外键: 有一个数据透视表可以创建多对多的关系,用于创建拥有许多用户(如品牌成员)的品牌组: 我试图通过直接所有权()或品牌成员身份获取属于用户的所有表单,通过多对多透视表获取用户所属的所有品牌的所有表
使用Mac、Php版本7.1.19、最新版本的Laravel和SQLite数据库。该网站有3个模型。用户、评论和帖子。我想将评论连接到用户。这样人们就可以在仪表板上看到自己的评论。数据库应正确设置,注释表具有['id'、'user\u id'、'body'、'created\u at'、'updated\u at']。tinker错误告诉我它需要一个返回,但我为这两个函数都添加了一个返回。 你能详
我找了很多,但没有找到任何答案,所以我希望你能帮助我! 我有三个表:post、users和post\U users。Post_users包含两列:user_id和Post_id。 我需要得到一个有口才的用户的所有帖子。有什么想法吗? 非常感谢你! (如果这个问题已经存在,我很抱歉,但我还没有找到它)