| 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;
 
- 	}
 
- }
 
 
  |