Pinq\Providers\Traversable\ScopeEvaluator::evaluateJoinOptions PHP Méthode

evaluateJoinOptions() public static méthode

Evaluates the join segment values and filter upon the supplied traversable.
public static evaluateJoinOptions ( Pinq\ITraversable $traversable, Options $join, Pinq\Queries\IResolvedParameterRegistry $resolvedParameters ) : Pinq\Interfaces\IJoiningToTraversable
$traversable Pinq\ITraversable
$join Pinq\Queries\Common\Join\Options
$resolvedParameters Pinq\Queries\IResolvedParameterRegistry
Résultat Pinq\Interfaces\IJoiningToTraversable
    public static function evaluateJoinOptions(ITraversable $traversable, Common\Join\Options $join, Queries\IResolvedParameterRegistry $resolvedParameters)
    {
        $values = self::evaluateSource($join->getSource(), $resolvedParameters);
        $joiningTraversable = $join->isGroupJoin() ? $traversable->groupJoin($values) : $traversable->join($values);
        if ($join->hasFilter()) {
            $filter = $join->getFilter();
            if ($filter instanceof Common\Join\Filter\Custom) {
                $joiningTraversable = $joiningTraversable->on($resolvedParameters[$filter->getOnFunction()->getCallableId()]);
            } elseif ($filter instanceof Common\Join\Filter\Equality) {
                $joiningTraversable = $joiningTraversable->onEquality($resolvedParameters[$filter->getOuterKeyFunction()->getCallableId()], $resolvedParameters[$filter->getInnerKeyFunction()->getCallableId()]);
            }
        }
        if ($join->hasDefault()) {
            $joiningTraversable = $joiningTraversable->withDefault($resolvedParameters[$join->getDefaultValueId()], $resolvedParameters[$join->getDefaultKeyId()]);
        }
        return $joiningTraversable;
    }

Usage Example

 public function visitJoinApply(Operations\JoinApply $operation)
 {
     /* @var $joiningCollection \Pinq\Interfaces\IJoiningToCollection */
     $joiningCollection = Traversable\ScopeEvaluator::evaluateJoinOptions($this->collection, $operation->getOptions(), $this->parameters);
     $joiningCollection->apply($this->parameters[$operation->getMutatorFunction()->getCallableId()]);
 }