【问题标题】:How to get all Tickets where( the last status == 'string')如何获取所有门票(最后一个状态=='字符串')
【发布时间】:2023-03-21 18:08:02
【问题描述】:

表的关系是Ticket有很多状态

票务表

票号

  • 1
  • 2
  • 3

状态表

ticket_id - 状态

  • 1 - 已创建
  • 2 - 已创建
  • 2 - 工作
  • 3 - 已创建
  • 3 - 工作
  • 3 - 完成

我使用了这段代码,但 last() 不起作用。

$tickets = Ticket::whereHas('status_table', function ($query) {
      $query->last()->where('status_column', 'working');
})->get();

我想使用 eloquent 或查询生成器获取最后状态为“工作”的票证。

基于表格示例: 结果仅是票证 ID #2

感谢您的宝贵时间!

【问题讨论】:

  • 你可以使用这样的东西$query->where('status_column', 'working')->latest()->first();
  • Ticket_table 有很多 Status_table,所以代码也不起作用。

标签: laravel eloquent


【解决方案1】:

您的结构取决于您的状态顺序的措辞。

你怎么知道“完成”是最后一个状态? DB 不知道。

您仍然可以通过这种方式获得结果:

$tickets = Ticket::whereHas('status_table', function ($query) {
    $query->where('status_column', 'working');
})->whereDoesntHave('status_table', function ($query) {
    $query->where('status_column', 'finished');
})->get();

【讨论】:

  • "你怎么知道 Finished 是最后一个状态" 这是我想要得到的,但是我有很多状态 "pending"、"sent"、"working"、"paused"、"恢复”和“完成”。那么我应该对每个状态的 whereDoestHave() 进行编码吗?确实有更多更少的代码。示例我想获取上一个状态暂停或恢复的位置。
  • 正如我所说,您的状态是主观的。并且会导致查询混乱
猜你喜欢
  • 1970-01-01
  • 2011-07-07
  • 2011-08-17
  • 2023-02-10
  • 1970-01-01
  • 2016-07-10
  • 2021-09-18
相关资源
最近更新 更多