我最近将Laravel网站移动到具有相同设置的不同服务器(php、Mariadb等版本略有不同),并遇到了一个有趣的问题。
我正在使用包Team Tea Time/laravel forum(以前的riari/laravel forum)来提供留言板功能。在论坛中,每个帖子都有一个链接,可以链接到最新的帖子,在移动之前效果很好。在移动之后,这些链接将指向最旧/第一篇帖子。
该功能是线程模型的一部分,特别是函数getLastPostAttribute()。
当我试图弄清这一点时,我意识到posts上的orderBy关系根本没有任何影响。无论我按什么属性(例如created\u at,sequence)排序,也不管我请求的是哪个排序方向,都会返回相同的post顺序和相同的第一篇post。
具有1811个具有不同时间戳和序列号的帖子的线程示例:
按顺序排序ASC工作正常,第一个帖子是带有smalles序列号的帖子。然而,这也是该关系的默认顺序(请参见模型)。
$t->posts()->orderBy('sequence', 'asc')->first();
Riari\Forum\Models\Post {#3268
id: 113544,
thread_id: 3995,
author_id: 191,
sequence: 1,
created_at: "2018-05-08 08:21:20",
updated_at: "2018-05-08 10:51:41",
deleted_at: null,
vote_count: 0,
}
现在,当我将排序顺序更改为desc时,它应该返回序列号最高的post。但是我得到了与上面相同的结果。
$t->posts()->orderBy('sequence', 'desc')->first();
Riari\Forum\Models\Post {#3297
id: 113544,
thread_id: 3995,
author_id: 191,
sequence: 1,
created_at: "2018-05-08 08:21:20",
updated_at: "2018-05-08 10:51:41",
deleted_at: null,
vote_count: 0,
}
这是按顺序描述排序时应返回的帖子:
Riari\Forum\Models\Post {#3332
id: 196449,
thread_id: 3995,
author_id: 534,
sequence: 1814,
created_at: "2020-12-16 14:55:54",
updated_at: "2020-12-16 14:55:54",
deleted_at: null,
vote_count: 0,
}
以前有人经历过吗?搬家后其他一切都很好,我不知道是什么导致了这样一个特定的错误。
当您查看Thread.php源代码中的关系定义时,您会看到帖子
默认情况下已经由created_at
排序:
public function posts()
{
$withTrashed = config('forum.preferences.display_trashed_posts') || Gate::allows('viewTrashedPosts');
$query = $this->hasMany(Post::class)->orderBy('created_at');
return $withTrashed ? $query->withTrashed() : $query;
}
我认为您需要重写posts方法,删除orderBy('created\u at')语句,然后您自己的orderBy就可以工作了。
问题内容: 我正在尝试获得最受欢迎的黑客马拉松,这需要通过各自的黑客马拉松订购。抱歉,这有点难以理解。 我有以下格式的数据库: 该模型是: 并定义为: 我已经尝试过,但是我觉得我犯了一个大错误(可能是$ this-> id),因为它根本不起作用。 我将如何尝试获取基于最多的相关hackathon参与者的最受欢迎的hackathon? 问题答案: 编辑:如果使用Laravel 5.2或更高版本,请使
请查看下面的代码。 我在“CompletedService”中有多条记录,并且在account表中有一个父id account\u id。我和你约会是为了钱。 ASC和DESC已经尝试过了。 尝试按whereHas排序,但不会影响任何记录。下面是模型关系。 我不需要在模型中使用orderby,因为我多次使用了这个关系,并且在这个查询中只需要orderby。 与一个已完成的服务记录关系只有一个账户。
我想知道如何在透视表created_at上使用orderby。 目前我有这个: 用户 活动 订阅[用户id、事件id、创建时间、更新时间] 我想让所有用户订阅特定的事件ID: 我将所有用户附加到特定事件上,但orderBy不起作用。我想使用的方式有没有连接方法。
问题内容: 有没有办法在laravel中合并2个关系? 这是现在设置的方式,但是有没有办法我可以将两者合并? 问题答案: 试用属性的getter方法,该方法返回从关系返回的合并集合。 或者,您可以在返回集合之前调用其他方法以获取不同的结果集。
我有3个模型和一个透视表: 学校年-模型 ID 课程模式 ID schoolyear_id 课程\学生-数据透视表 课程号 学生证 学生模型 ID 关系是: 一学年有许多课程 一门属于任何学生的课程 在任何课程中的学生 什么是最快、更优雅的方法来找到学生进入一个学年,并且能够按学生属性进行排序?
我使用的是Laravel作业批处理功能,我有一个仪表板,可以显示批处理的进度(已处理、失败、挂起的作业…等等)。 每个用户都有自己的仪表板,我想根据登录用户显示Batch的进度,但我看不到与批处理表的用户模型有任何关系。 是否有可能以某种方式与这些表建立关系?还有其他选择吗? 谢谢