[英]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.