簡體   English   中英

查詢Laravel中with()關系的結果

[英]Query the results from with() relationship in Laravel

所以我有一個with()關系,每個客戶都分配了訂單。 我嘗試僅在一定時期內退回訂單,如下所示:

if (isset($filters["date_from"]) && strlen($filters["date_from"]) > 0) {
     $value = date('Y-m-d', strtotime($filters["date_from"]));
     $sales_by_customer = $sales_by_customer->with(array("orders" => function ($query) use ($value) {
          $query->whereDate("created_at", '>=', $value);
     }));
}

如您所見,我只想為每個客戶退還一定時期內的訂單。 但是現在,它並沒有考慮我的查詢,它只是返回每個客戶的所有訂單。 任何想法如何獲得我想要的。 謝謝大家的時間!

如果$sales_by_customer還不是集合with則用替換為load

if (isset($filters["date_from"]) && strlen($filters["date_from"]) > 0) {
     $value = date('Y-m-d', strtotime($filters["date_from"]));
     $sales_by_customer = $sales_by_customer->load(array("orders" => function ($query) use ($value) {
          $query->where("created_at", '>=', $value);
     }));
}

假設$sales_by_customer是單個客戶, $sales_by_customer提取在特定時間之間創建的所有訂單。

$sales_by_customer->orders->where("created_at", '>=', $value)->all();

如果$sales_by_customer是多個客戶的集合,則需要在foreach循環內的where查詢中運行。

foreach($sales_by_customer as $customerSale) {
   $customerSale->orders->where("created_at", '>=', $value)->all();
}

解決方案:顯然問題是由於某種原因,我無法使用whereDate,並且不得不使用簡單的where子句,但對格式進行了一些更改,但我卻獲得了日期(在DB created_at中,其格式如下: Ymd H:i:s和my過濾日期的格式為: Ymd ),因此解決方案如下所示:

if (isset($filters["date_from"]) && strlen($filters["date_from"]) > 0) {
     $value = date('Y-m-d 00:00:00', strtotime($filters["date_from"]));
     $sales_by_customer = $sales_by_customer->with(array("orders" => function ($query) use ($value) {
          $query->where("created_at", '>=', $value);
     }));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM