我試圖從以前的答案第一種方式問這個問題之前,但失敗了,所以我想它有一個失誤。但看到和答覆後,似乎我不明白的東西。所以我在Laravel Eloquent內部進行了挖掘,這裏是我發現的:
Eloquent構建類「:: where」方法在返回實例之前更改$ this-> query屬性。下面是代碼:的 「$這個 - >查詢 - > addNestedWhereQuery($查詢 - > getQuery(),$布爾值);」
public function where($column, $operator = null, $value = null, $boolean = 'and')
{
if ($column instanceof Closure) {
$query = $this->model->newQueryWithoutScopes();
call_user_func($column, $query);
$this->query->addNestedWhereQuery($query->getQuery(), $boolean);
} else {
call_user_func_array([$this->query, 'where'], func_get_args());
}
return $this;
}
採取通知在第六行。
Builder類「:: whereHas」方法不會修改「$ this-> query」屬性。
public function whereHas($relation, Closure $callback, $operator = '>=', $count = 1)
{
return $this->has($relation, $operator, $count, 'and', $callback);
}
那麼,它與我的問題有什麼關係。我創建了一個這樣的查詢:
$query = Item::where('active',1);
然後我說的條件:進行
if($meta){
$query->whereHas('metas', function($query) {
$query->where('Meta_id', 1);
$query->where('value', 'new);
})
->whereHas('metas', function($query) {
$query->where('Meta_id', 3);
$query->where('value', 'LCD);
})
}
,然後查詢:
$query->get();
的錯誤是:: whereHas方法有關,我必須做的是將變量的結果賦值給where變量:
if($meta){
$query = $query->whereHas('metas', function($query) {
$query->where('Meta_id', 1);
$query->where('value', 'new);
})
->whereHas('metas', function($query) {
$query->where('Meta_id', 3);
$query->where('value', 'LCD);
})
}
這就是所有。經常檢查內部是否有意義的工作