Php 按另一个表的计数排序?

Php 按另一个表的计数排序?,php,mysql,laravel,Php,Mysql,Laravel,我有一个名为user\u room\u vists的表,用于存储每个用户对房间的访问。下面是这个表的结构,以及我是如何在自己的数据库中创建它的 DROP TABLE IF EXISTS `user_room_visits`; CREATE TABLE `user_room_visits` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(10) unsigned NOT NULL, `room_id` int(10) unsi

我有一个名为
user\u room\u vists
的表,用于存储每个用户对房间的访问。下面是这个表的结构,以及我是如何在自己的数据库中创建它的

DROP TABLE IF EXISTS `user_room_visits`;
CREATE TABLE `user_room_visits` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(10) unsigned NOT NULL,
  `room_id` int(10) unsigned NOT NULL,
  `entry_timestamp` double NOT NULL,
  `exit_timestamp` double NOT NULL,
  `hour` int(11) NOT NULL,
  `minute` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`),
  KEY `entry_timestamp` (`entry_timestamp`),
  KEY `exit_timestamp` (`exit_timestamp`)
) ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=latin1;
然后我有一个名为
users
的表,它显然包含了用户。我正在尝试选择用户访问房间的次数(按最高顺序)

这意味着我必须将
user\u room\u visions
中的
user\u id
列与
users
表中的
id
列相匹配,但由于它位于一个单独的表中,因此变得复杂

我没有任何例子来向你们展示我的尝试,因为我被卡住了,每次我用谷歌搜索这个,它都会提出一些我无法用以解决我自己问题的东西,而事实上我只是不知道我需要做些什么来实现这一点。我还需要在Laravel框架中使用它的ORM equalent来实现这一点,这使得查询更加容易,所以我需要的不仅仅是MySQL

这是模型文件

class UserRoomVisit extends Model
{
    protected $table = 'user_room_visits';
    public $timestamps = true;
    protected $guarded = ['id'];
}

class User extends Authenticatable
{
    protected $table = 'users';
    public $timestamps = true;
    protected $guarded = ['id'];

    public function userStats() {
        return $this->belongsTo(UserStats::class, 'id');
    }
}

看起来你不想在这里使用多对多关系。因此,在
Room
模型中定义
userroomvisions
关系:

public function userRoomVisits()
{
    return $this->hasMany(UserRoomVisit::class);
}
public function userRoomVisits()
{
    return $this->hasMany(UserRoomVisit::class);
}
并使用如下方法获得房间:

Room::withCount(['userRoomVisits' => function($q) {
        $q->where('user_id', auth()->id());
    }])
    ->latest('user_room_visits_count')
    ->get();
更新

评论中提出的另一个问题的代码:

User::withCount('userRoomVisits')->latest('user_room_visits_count')->take(5)->get();
用户
模型中定义关系:

public function userRoomVisits()
{
    return $this->hasMany(UserRoomVisit::class);
}
public function userRoomVisits()
{
    return $this->hasMany(UserRoomVisit::class);
}

模型文件的内容是什么?你在那里定义了关系吗?@Udayradeshmukh我刚刚用模型文件更新了我的问题。@0b9ff4fb你能解释一下你想用一些样本数据做什么吗?我不能用
用户
模型的集合,它们是按
用户
房间的房间访问次数降序排列的,限制为5。假设
users
表有一个名为
room\u visions
的列,我会这样做:
User::orderBy('room\u visions','DESC')->limit(5)->get(),但它没有。。因此,我需要做一些更复杂的事情。我正在尝试获取
用户
模型的集合,而不是
房间
模型。@0b9ff4fb您最初的问题是“我正在尝试选择(按最高顺序)用户访问房间的次数”。但是如果您想通过
room\u id
获取用户,请更改代码。这是完全相同的原则,相同的关系,但定义在另一个模型中,相同的代码与交换的关系等。您的答案有问题,首先它没有按计数顺序排列集合,其次您的代码中有错误(附近->何处,意外的
->
)最后,您没有给关系
hasMany
一个列名。我已经修复了第二个,谢谢。另外,我很确定它是按计数来订购房间的,我在很多应用程序中都使用过该代码。而且您也不需要指定
有许多列的名称,因为我的报告中已经描述了您。当运行代码时,我得到一个错误
mb_strpos()期望参数1是字符串,给定的对象
,另一个问题是当您应该传递当前用户模型的id时传递
auth()->id()