【问题标题】:Laravel get data where relation doesn't contain specific dataLaravel 获取关系不包含特定数据的数据
【发布时间】:2021-08-09 07:55:04
【问题描述】:

我有发票模型和发票日志。

发票日志包含以下数据

id-----invoice_id----status--
1------16------------processing
2------16------------shipped
3------16------------delivered
4------16------------returned
5------17------------processing
6------17------------shipped
7------18------------processing

我想要发票对象,其中发票的发票日志不包含“已交付”或“已退回”状态。

我想要发票 ID 17 和 18 作为结果。

我试过了

$invoices = Invoice::whereHas('logs', function ($query) {
    $query->where('invoice_status','!=', 'delivered')->where('invoice_status','!=', 'returned');
})->get();

但是返回错误的值。

【问题讨论】:

  • 您的列名是status,但您是通过invoice_status 查询的吗?只是说您的表定义和查询。

标签: php mysql laravel eloquent


【解决方案1】:

我认为您的解决方案非常接近 - 您可以使用 whereDoesntHave 尝试以下方法吗?

$invoices = Invoice::whereDoesntHave('logs', function ($query) {
    $query->where('invoice_status','!=', 'delivered')
          ->orWhere('invoice_status','!=', 'returned');
})->get();

【讨论】:

  • 是的。但没有奏效。因为仍然存在相同 invoice_id 的运输和处理状态
猜你喜欢
  • 1970-01-01
  • 2015-07-23
  • 2021-05-06
  • 2015-02-10
  • 1970-01-01
  • 2020-07-01
  • 2018-02-14
  • 2017-04-13
相关资源
最近更新 更多