本文整理汇总了PHP中Illuminate\Database\Eloquent\Builder::getEagerLoads方法的典型用法代码示例。如果您正苦于以下问题:PHP Builder::getEagerLoads方法的具体用法?PHP Builder::getEagerLoads怎么用?PHP Builder::getEagerLoads使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Illuminate\Database\Eloquent\Builder
的用法示例。
在下文中一共展示了Builder::getEagerLoads方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: eagerLoadRelations
/**
* Eager load relationships on collection.
*
* @param Builder $builder
* @param array $models
* @return array
*/
public function eagerLoadRelations(Builder $builder, array $models)
{
foreach ($builder->getEagerLoads() as $name => $constraints) {
if (strpos($name, '.') === false) {
$models = $this->loadRelation($builder, $models, $name, $constraints);
}
}
return $models;
}
示例2: apply
/**
* @param Builder $builder
* @param Eloquent $model
*
* @throws \InvalidArgumentException
*/
public function apply(Builder $builder, Eloquent $model)
{
$query = $builder->getQuery();
if (count($loads = $builder->getEagerLoads()) === 0 && count($query->wheres) === 0 || count($properties = Factory::getPropertiesByEntity($model)) === 0) {
return;
}
//compact eager loading
if (count($loads) > 0) {
$eadgeLoads = [];
$props = [];
foreach ($loads as $load => $data) {
if ($properties->has($load)) {
$props[$load] = $properties->get($load);
//$eadgeLoads[$load] = $data;
} else {
$eadgeLoads[$load] = $data;
}
}
if (count($props)) {
$eadgeLoads = ['values' => function (Values $relation) use($props) {
$relation->setProperties(new Collection($props));
}] + $eadgeLoads;
}
$builder->setEagerLoads($eadgeLoads);
}
$table = $model->getTable();
$columns = $this->parseWhere($properties, $query->wheres, $table);
if (count($columns) === 0) {
return;
}
$value = new Value();
$query->select($table . '.*');
$multiple = false;
foreach ($columns as $alias => $property) {
if ($property->multiple) {
$multiple = true;
}
$query->leftJoin($value->getTable() . ' AS ' . $alias, function (JoinClause $join) use($model, $alias, $property) {
$join->on($model->getTable() . '.' . $model->getKeyName(), '=', $alias . '.entity_id');
$join->where($alias . '.property_id', '=', $property->id);
});
}
if ($multiple) {
//Distinct if condition by multiple values
$query->distinct();
}
}
示例3: parseWith
/**
* Parse the with parameter.
*
* @param string $params
* @return void
*/
protected function parseWith($params)
{
$with = explode(',', $params);
$with = in_array('*', $this->withable) ? $with : array_only($with, $this->withable);
foreach ($this->additionalSorts as $sort => $direction) {
$parts = explode('.', $sort);
$realKey = array_pop($parts);
$relation = implode('.', $parts);
if (in_array($relation, $with)) {
$this->builder->with([$relation => function ($query) use($realKey, $direction) {
$query->orderBy($realKey, $direction);
}]);
if (($key = array_search($relation, $with)) !== false) {
unset($with[$key]);
}
}
}
if (!empty($with)) {
$this->builder->with($with);
}
$this->with = $this->builder->getEagerLoads();
}
示例4: getEagerLoads
/**
* Get the relationships being eagerly loaded.
*
* @return array
* @static
*/
public static function getEagerLoads()
{
return \Illuminate\Database\Eloquent\Builder::getEagerLoads();
}
示例5: hasEagerLoad
/**
* @return bool
*/
protected function hasEagerLoad()
{
return $hasEagerLoad = (bool) count($this->builder->getEagerLoads());
}