AutorÃa | Ultima modificación | Ver Log |
<?php// This file is part of Moodle - http://moodle.org///// Moodle is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// Moodle is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>./*** Join a table.** @package block_dash* @copyright 2020 bdecent gmbh <https://bdecent.de>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/namespace block_dash\local\dash_framework\query_builder;use block_dash\local\dash_framework\query_builder\exception\invalid_operator_exception;use block_dash\local\dash_framework\query_builder\exception\invalid_where_clause_exception;use coding_exception;use dml_exception;/*** Join a table.** @package block_dash*/class join {/*** Inner JOIN query.*/const TYPE_INNER_JOIN = 'JOIN';/*** SQL Left Join.*/const TYPE_LEFT_JOIN = 'LEFT JOIN';/*** @var string Table name of joined table.*/private $table;/*** @var string Joined table alias.*/private $alias;/*** @var array*/private $joinconditions = [];/*** SQL join type. See self::TYPE_*** @var string*/private $jointype;/*** @var array Extra paramters used in query build.*/private $extraparameters;/*** Constructors* @param string $table Table name of joined table.* @param string $alias Joined table alias.* @param string $jointablefield Field of joined table to reference in join condition.* @param string $origintablefield Field of origin table to join to.* @param string $jointype SQL join type. See self::TYPE_** @param array $extraparameters Extra parameters used in join SQL.*/public function __construct(string $table, string $alias, string $jointablefield, string $origintablefield,$jointype = self::TYPE_INNER_JOIN, array $extraparameters = []) {$this->table = $table;$this->alias = $alias;// Join table field.if (!empty($jointablefield)) {$this->joinconditions[] = sprintf('%s.%s = %s', $alias, $jointablefield, $origintablefield);}$this->jointype = $jointype;$this->extraparameters = $extraparameters;}/*** Get alias mentioned in query.** @return string*/public function get_alias(): string {return $this->alias;}/*** Add additional raw join condition.** @param string $condition*/public function add_join_condition(string $condition): void {$this->joinconditions[] = $condition;}/*** Get SQL and params for join.** @return array<string, array>*/public function get_sql_and_params(): array {$sql = sprintf('%s {%s} %s ON ', $this->jointype, $this->table, $this->alias);$sql .= implode(' AND ', $this->joinconditions);return [$sql, $this->extraparameters];}}