diagram = $diagram; $src_pos = $this->getXy($master_table, $master_field); $dest_pos = $this->getXy($foreign_table, $foreign_field); $this->srcConnPointsLeft = $src_pos[0]; $this->srcConnPointsRight = $src_pos[1]; $this->destConnPointsLeft = $dest_pos[0]; $this->destConnPointsRight = $dest_pos[1]; $this->masterTablePos = $src_pos[2]; $this->foreignTablePos = $dest_pos[2]; $this->masterTableId = $master_table->tableId; $this->foreignTableId = $foreign_table->tableId; } /** * Each Table object have connection points * which is used to connect to other objects in Dia * we detect the position of key in fields and * then determines its left and right connection * points. * * @param TableStatsDia $table The current table name * @param string $column The relation column name * * @return array Table right,left connection points and key position */ private function getXy($table, $column) { $pos = array_search($column, $table->fields); // left, right, position $value = 12; if ($pos != 0) { return [ $pos + $value + $pos, $pos + $value + $pos + 1, $pos, ]; } return [ $pos + $value, $pos + $value + 1, $pos, ]; } /** * Draws relation references * * connects master table's master field to foreign table's * foreign field using Dia object type Database - Reference * Dia object is used to generate the XML of Dia Document. * Database reference Object and their attributes are involved * in the combination of displaying Database - reference on Dia Document. * * @see PDF * * @param bool $showColor Whether to use one color per relation or not * if showColor is true then an array of $listOfColors * will be used to choose the random colors for * references lines. we can change/add more colors to * this * * @return bool|void */ public function relationDraw($showColor) { ++DiaRelationSchema::$objectId; /* * if source connection points and destination connection * points are same then return it false and don't draw that * relation */ if ($this->srcConnPointsRight == $this->destConnPointsRight) { if ($this->srcConnPointsLeft == $this->destConnPointsLeft) { return false; } } if ($showColor) { $listOfColors = [ 'FF0000', '000099', '00FF00', ]; shuffle($listOfColors); $this->referenceColor = '#' . $listOfColors[0] . ''; } else { $this->referenceColor = '#000000'; } $this->diagram->writeRaw( ' #1# #n# ' ); } }