我试图从以前的答案第一种方式问这个问题之前,但失败了,所以我想它有一个失误。但看到和答复后,似乎我不明白的东西。所以我在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);
})
}
这就是所有。经常检查内部是否有意义的工作