2017-08-09 126 views
0

我的查詢:Laravel whereHas返回意外的結果

Description::whereHas('expenses', function($query) { 
     $query->where('date', $this->date); 
    })->with('expenses')->get(); 

上述查詢返回給定日期的所有描述,但它返回的所有費用爲說明,而不是在指定日期的費用。我不明白這是爲什麼,我想首先理解這一點。這是因爲with('expenses')我只是渴望加載每個描述的所有費用?而且,我只是返回給定日期至少有一筆費用的所有描述?

如果以上所有內容都屬實,我如何才能返回給定日期的所有說明,包括給定日期的費用?

描述型號:

public function expenses() 
{ 
    return $this->hasMany(Expense::class); 
} 

費用型號:

public function description() 
{ 
    return $this->belongsTo(Description::class); 
} 
+1

的[合併 '與' 和在Laravel 5 'whereHas'](https://stackoverflow.com/questions/29591931/merge-with-and-wherehas-in-laravel-5) – Maraboc

回答

1

您是僅Description對象應加載過濾。您應該將相同的過濾器應用於預先加載,以便只將這些過濾器添加到模型中。

Description::whereHas('expenses', function($query) { 
     $query->where('date', $this->date); 
    }) 
    ->with([ 
     'expenses' => function($query) { 
      $query->where('date', $this->date); 
     } 
    ]) 
    ->get(); 
+0

可能的複製我想這會是這麼簡單.. – Hardist