当前位置: 首页 > 知识库问答 >
问题:

基于关系数据的Laravel雄辩顺序

华睿识
2023-03-14

我有以下2张表:

Cars
----
id | created_at

and

Repaired
id | cars_id | updated_at

我想显示所有的汽车,由created_atdesc订购,但也由updated_at修复透视表订购。修复的条目可以具有许多特定的cars_id

所以如果carA是created_at2017-02-20,并且carB是created_at2016-01-10,但是修复carB中的updated_at2017-02-22,我想显示carBBEFOREcarA,因为关系是较新的。

我也不想从关系表中加载数据。

我试过以下方法:

$cars = $model->load(['repaired' => function($query) {
    return $query->orderBy('updated_at', 'desc');
}])->orderBy('created_at', 'desc');

$model->join('repaired', 'repaired.cars_id', '=', 'cars.id')
      ->orderBy('repaired.updated_at', 'desc')
      ->orderBy('cars.created_at', 'desc')
      ->select('cars.*');

^此查询返回修复表中的所有项,即使updated_at字段为NULL。我不能把他们分组。

共有2个答案

萧树
2023-03-14
 $popular_posts = Post::withCount('favorite_to_users')
            ->orderBy('view_count', 'desc')
            ->orderBy('favorite_to_users_count', 'desc')
            ->take(5)->get();
佴波鸿
2023-03-14

您可以在Eloquent中使用touch parent timestamps功能,在每次维修更新时更新车辆的updated\u。

在修复的模型中,只需添加以下行:

protected $touches = ['car'];

当然,这是假设您的关系方法名为car()

然后你可以这样做:

Cars::orderBy('updated_at');

每次添加或更新修复表中的一行时,在汽车关系中指定的汽车将其updated_at设置为相同的时间。这样你就可以按它点菜了。

 类似资料:
  • 我有以下三个表格: 所以基本上这种关系就像: 用户有许多项目 项目属性到客户端 我的问题是: 如何使用eloquent获得用户的所有客户端? 似乎我不能用户hasManyPass方法,因为在客户端表中没有project_id。 因此,我希望达到的目标是:

  • 我有三种模式——博客、帖子、评论。博客有很多帖子,帖子有很多评论 当我写作时 它会给所有的博客发帖子和评论。但我将如何获得那些由管理员用户创建的博客,即评论表中的用户id。在哪里写入

  • 我是Laravel5.2的新手,正在开发一个遗留系统,对雄辩有点困惑,希望有人能给我代码。 共有3个表格: 卡片类别卡片2类 卡片可以是许多类别的一部分,这些类别保存在cards2cat表中。 cards2cat表的结构如下 id(主键)图像(卡)类别 我想做的是在Cards模型中有一个方法,名为getCardsWithCategors,它返回Cards信息和category表中类别的名称。 ca

  • 我正在编写php代码,对于当前的项目,我正在使用laravel框架(带有雄辩的ORM)。在这个项目中,我创建了两个表:用户和任务。我想在这些表之间创建一个“一对多”的关系。因此,一个用户可以有许多任务。在Tasks类中,我创建了方法所有者(): 但是当我以前得到用户名的时候 我得到这个异常:未定义的属性:illumb\Database\Eloquent\Relations\BelongsTo::$

  • 我试着补充: 并用调用,但响应为空。

  • 我刚刚开始学习LaravelV3,我试图通过创建一个博客来了解eloquent的一对多关系。我的帖子与类别有多对一的关系(每个帖子都链接到一个类别)。 我有以下表格和以下字段: 帖子:id、标题、正文、创建日期、类别id 类别:id、名称 我有以下两种型号: 我想出了如何通过传递类别id来获得所有帖子: 我只是需要帮助,找出如何获得所有的职位,并得到他们的更正类别。因此,在视图中的一天结束时,我可