| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 | <?php namespace System\DB\Query;use System\Str;class Dynamic {	/**	 * Add conditions to a query from a dynamic method call.	 *	 * @param  string  $method	 * @param  array   $parameters	 * @param  Query   $query	 * @return Query	 */	public static function build($method, $parameters, $query)	{		// ---------------------------------------------------------		// Strip the "where_" off of the method.		// ---------------------------------------------------------		$finder = substr($method, 6);		// ---------------------------------------------------------		// Split the column names from the connectors.		// ---------------------------------------------------------		$segments = preg_split('/(_and_|_or_)/i', $finder, -1, PREG_SPLIT_DELIM_CAPTURE);		// ---------------------------------------------------------		// The connector variable will determine which connector		// will be used for the condition. We'll change it as we		// come across new connectors in the dynamic method string.		//		// The index variable helps us get the correct parameter		// value for the where condition. We increment it each time		// we add a condition.		// ---------------------------------------------------------		$connector = 'AND';		$index = 0;		// ---------------------------------------------------------		// Iterate through each segment and add the conditions.		// ---------------------------------------------------------		foreach ($segments as $segment)		{			if ($segment != '_and_' and $segment != '_or_')			{				if ( ! array_key_exists($index, $parameters))				{					throw new \Exception("Wrong number of parameters for dynamic finder [$method].");									}				$query->where($segment, '=', $parameters[$index], $connector);				$index++;			}			else			{				$connector = trim(strtoupper($segment), '_');			}		}		return $query;	}}
 |