【发布时间】:2016-07-05 20:50:05
【问题描述】:
这适用于 Laravel 5.2。我不确定这两段代码之间有什么区别,但其中一段似乎可以通过引用工作,而另一段则不行。
在此示例中,查询对象不保留方法调用的任何修改,这迫使我检查是否为 false 以执行操作:
$query = new User();
$query = $this->processOrderByFields($query, $request, User::getOrderByFields());
if ($query === false) {
return $this->respondError(HTTP_UNPROCESSABLE_ENTITY);
}
public function processOrderByFields($query, $request, $availableFields)
{
# Get fields
foreach ($fields as $field) {
# Do things to the field...
if ( # Not important ) {
$query = $query->orderBy(# Field, # Direction);
} else {
$badFields[] = $field;
}
}
if ($badFields) {
return false;
} else {
return $query;
}
}
但是,这很好用:
$query = new User();
$this->processInclude($query, $request, Client::getIncludeRelationships());
public function processInclude($query, $request, $objectRelationship )
{
if ( $request->get('include') && is_array($request->get('include')) ) {
$include = array_intersect($request->get('include'), $objectRelationship);
foreach($include as $relation) {
$query->with($relation);
}
}
}
我猜这与with 方法的关系建立部分有关,但我不确定。
【问题讨论】:
标签: php eloquent laravel-5.2 query-builder