/** * @param Database $database Parent database. * @param QueryCompiler $compiler Driver specific QueryGrammar instance (one per builder). * @param array $from Initial set of table names. * @param array $columns Initial set of columns to fetch. */ public function __construct(Database $database, QueryCompiler $compiler, array $from = [], array $columns = []) { parent::__construct($database, $compiler); $this->tables = $from; if (!empty($columns)) { $this->columns = $this->fetchIdentifiers($columns); } }
/** * @param string $class * @param ORM $orm * @param Loader $loader */ public function __construct($class, ORM $orm = null, Loader $loader = null) { $this->class = $class; $this->orm = $this->saturate($orm, ORM::class); $this->columns = $this->dataColumns = []; //We aways need primary loader if (empty($this->loader = $loader)) { //Selector always need primary data loaded to define data structure and perform query //parsing, in most of cases we can easily use RootLoader associated with primary record //schema $this->loader = new RootLoader($this->orm, null, $this->orm->schema($class)); } //Every ORM loader has ability to declare it's primary database, we are going to use //primary loader database to initiate selector $database = $this->loader->dbalDatabase(); //AbstractSelect construction parent::__construct($database, $database->driver()->queryCompiler($database->getPrefix())); }