Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
Complex classes like EntityMap often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use EntityMap, and based on these observations, apply Extract Interface, too.
| 1 | <?php |
||
| 24 | class EntityMap |
||
| 25 | { |
||
| 26 | /** |
||
| 27 | * The mapping driver to use with this entity |
||
| 28 | */ |
||
| 29 | protected $driver = 'illuminate'; |
||
| 30 | |||
| 31 | /** |
||
| 32 | * The Database Connection name for the model. |
||
| 33 | * |
||
| 34 | * @var string |
||
| 35 | */ |
||
| 36 | protected $connection; |
||
| 37 | |||
| 38 | /** |
||
| 39 | * The table associated with the entity. |
||
| 40 | * |
||
| 41 | * @var string|null |
||
| 42 | */ |
||
| 43 | protected $table = null; |
||
| 44 | |||
| 45 | /** |
||
| 46 | * The primary key for the model. |
||
| 47 | * |
||
| 48 | * @var string |
||
| 49 | */ |
||
| 50 | protected $primaryKey = 'id'; |
||
| 51 | |||
| 52 | /** |
||
| 53 | * Array containing a list of class attributes. Mandatory if the |
||
| 54 | * mapped entity is a Plain PHP Object. |
||
| 55 | * |
||
| 56 | * @var array |
||
| 57 | */ |
||
| 58 | protected $attributes = []; |
||
| 59 | |||
| 60 | /** |
||
| 61 | * The Custom Domain Class to use with this mapping |
||
| 62 | * |
||
| 63 | * @var string|null |
||
| 64 | */ |
||
| 65 | protected $class = null; |
||
| 66 | |||
| 67 | /** |
||
| 68 | * Attributes that should be treated as Value Objects |
||
| 69 | * |
||
| 70 | * @var array |
||
| 71 | */ |
||
| 72 | protected $embeddables = []; |
||
| 73 | |||
| 74 | /** |
||
| 75 | * Determine the relationships method used on the entity. |
||
| 76 | * If not set, mapper will autodetect them |
||
| 77 | * |
||
| 78 | * @var array |
||
| 79 | */ |
||
| 80 | private $relationships = []; |
||
| 81 | |||
| 82 | /** |
||
| 83 | * Relationships that should be treated as collection. |
||
| 84 | * |
||
| 85 | * @var array |
||
| 86 | */ |
||
| 87 | private $manyRelations = []; |
||
| 88 | |||
| 89 | /** |
||
| 90 | * Relationships that should be treated as single entity. |
||
| 91 | * |
||
| 92 | * @var array |
||
| 93 | */ |
||
| 94 | private $singleRelations = []; |
||
| 95 | |||
| 96 | /** |
||
| 97 | * Relationships for which the key is stored in the Entity itself |
||
| 98 | * |
||
| 99 | * @var array |
||
| 100 | */ |
||
| 101 | private $localRelations = []; |
||
| 102 | |||
| 103 | /** |
||
| 104 | * Relationships for which the key is stored in the Related Entity |
||
| 105 | * |
||
| 106 | * @var array |
||
| 107 | */ |
||
| 108 | private $foreignRelations = []; |
||
| 109 | |||
| 110 | /** |
||
| 111 | * Relationships which use a pivot record. |
||
| 112 | * |
||
| 113 | * @var array |
||
| 114 | */ |
||
| 115 | private $pivotRelations = []; |
||
| 116 | |||
| 117 | /** |
||
| 118 | * Dynamic relationships |
||
| 119 | * |
||
| 120 | * @var array |
||
| 121 | */ |
||
| 122 | private $dynamicRelationships = []; |
||
| 123 | |||
| 124 | /** |
||
| 125 | * The number of models to return for pagination. |
||
| 126 | * |
||
| 127 | * @var int |
||
| 128 | */ |
||
| 129 | protected $perPage = 15; |
||
| 130 | |||
| 131 | /** |
||
| 132 | * The relations to eager load on every query. |
||
| 133 | * |
||
| 134 | * @var array |
||
| 135 | */ |
||
| 136 | protected $with = []; |
||
| 137 | |||
| 138 | /** |
||
| 139 | * The class name to be used in polymorphic relations. |
||
| 140 | * |
||
| 141 | * @var string |
||
| 142 | */ |
||
| 143 | protected $morphClass; |
||
| 144 | |||
| 145 | /** |
||
| 146 | * Sequence name, to be used with postgreSql |
||
| 147 | * defaults to %table_name%_id_seq |
||
| 148 | * |
||
| 149 | * @var string|null |
||
| 150 | */ |
||
| 151 | protected $sequence = null; |
||
| 152 | |||
| 153 | /** |
||
| 154 | * Indicates if the entity should be timestamped. |
||
| 155 | * |
||
| 156 | * @var bool |
||
| 157 | */ |
||
| 158 | public $timestamps = false; |
||
| 159 | |||
| 160 | /** |
||
| 161 | * The name of the "created at" column. |
||
| 162 | * |
||
| 163 | * @var string |
||
| 164 | */ |
||
| 165 | protected $createdAtColumn = 'created_at'; |
||
| 166 | |||
| 167 | /** |
||
| 168 | * The name of the "updated at" column. |
||
| 169 | * |
||
| 170 | * @var string |
||
| 171 | */ |
||
| 172 | protected $updatedAtColumn = 'updated_at'; |
||
| 173 | |||
| 174 | /** |
||
| 175 | * Indicates if the entity uses softdeletes |
||
| 176 | * |
||
| 177 | * @var boolean |
||
| 178 | */ |
||
| 179 | public $softDeletes = false; |
||
| 180 | |||
| 181 | /** |
||
| 182 | * The name of the "deleted at" column. |
||
| 183 | * |
||
| 184 | * @var string |
||
| 185 | */ |
||
| 186 | protected $deletedAtColumn = 'deleted_at'; |
||
| 187 | |||
| 188 | /** |
||
| 189 | * The many to many relationship methods. |
||
| 190 | * |
||
| 191 | * @var array |
||
| 192 | */ |
||
| 193 | protected static $manyMethods = ['belongsToMany', 'morphToMany', 'morphedByMany']; |
||
| 194 | |||
| 195 | /** |
||
| 196 | * The 'Many' relationships classes, which related Entity attribute should be |
||
| 197 | * an array/entityCollection |
||
| 198 | * |
||
| 199 | * @var array |
||
| 200 | */ |
||
| 201 | protected static $manyClasses = ['BelongsToMany', 'HasMany', 'HasManyThrough', 'MorphMany', 'MorphToMany']; |
||
| 202 | |||
| 203 | /** |
||
| 204 | * The 'Single' relationships classes, which related Entity attribute should be |
||
| 205 | * another Entity. |
||
| 206 | * |
||
| 207 | * @var array |
||
| 208 | */ |
||
| 209 | protected static $singleClasses = ['BelongsTo', 'HasOne', 'MorphOne', 'MorphTo']; |
||
| 210 | |||
| 211 | /** |
||
| 212 | * Relationships with a pivot record |
||
| 213 | * |
||
| 214 | * @var array |
||
| 215 | */ |
||
| 216 | protected static $pivotClasses = ['BelongsToMany', 'MorphToMany']; |
||
| 217 | |||
| 218 | /** |
||
| 219 | * Relationships on which key is stored in the Entity itself |
||
| 220 | * |
||
| 221 | * @var array |
||
| 222 | */ |
||
| 223 | protected static $localClasses = ['BelongsTo', 'MorphTo']; |
||
| 224 | |||
| 225 | /** |
||
| 226 | * Relationships on which key is stored in the related Entity record or in a pivot record |
||
| 227 | * |
||
| 228 | * @var array |
||
| 229 | */ |
||
| 230 | protected static $foreignClasses = [ |
||
| 231 | 'BelongsToMany', |
||
| 232 | 'HasMany', |
||
| 233 | 'HasManyThrough', |
||
| 234 | 'MorphMany', |
||
| 235 | 'MorphToMany', |
||
| 236 | 'HasOne', |
||
| 237 | 'MorphOne', |
||
| 238 | ]; |
||
| 239 | |||
| 240 | /** |
||
| 241 | * The date format to use with the current database connection |
||
| 242 | * |
||
| 243 | * @var string |
||
| 244 | */ |
||
| 245 | protected $dateFormat; |
||
| 246 | |||
| 247 | /** |
||
| 248 | * The Analogue's manager instance. |
||
| 249 | * |
||
| 250 | * @var \Analogue\ORM\System\Manager |
||
| 251 | */ |
||
| 252 | private $manager; |
||
| 253 | |||
| 254 | /** |
||
| 255 | * Set the Manager that will be used for relationship's mapper instantiations. |
||
| 256 | * |
||
| 257 | * @param Manager $manager |
||
| 258 | */ |
||
| 259 | public function setManager(Manager $manager) |
||
| 263 | |||
| 264 | /** |
||
| 265 | * Return Domain class attributes, useful when mapping to a Plain PHP Object |
||
| 266 | * |
||
| 267 | * @return array |
||
| 268 | */ |
||
| 269 | public function getAttributes() |
||
| 273 | |||
| 274 | /** |
||
| 275 | * Set the domain class attributes |
||
| 276 | * |
||
| 277 | * @param array $attributeNames |
||
| 278 | */ |
||
| 279 | public function setAttributes(array $attributeNames) |
||
| 283 | |||
| 284 | /** |
||
| 285 | * Get all the attribute names for the class, including relationships, embeddables and primary key. |
||
| 286 | * |
||
| 287 | * @return array |
||
| 288 | */ |
||
| 289 | public function getCompiledAttributes() |
||
| 301 | |||
| 302 | /** |
||
| 303 | * Set the date format to use with the current database connection |
||
| 304 | * |
||
| 305 | * @param string $format |
||
| 306 | */ |
||
| 307 | public function setDateFormat($format) |
||
| 311 | |||
| 312 | /** |
||
| 313 | * Get the date format to use with the current database connection |
||
| 314 | * |
||
| 315 | * @return string |
||
| 316 | */ |
||
| 317 | public function getDateFormat() |
||
| 321 | |||
| 322 | /** |
||
| 323 | * Set the Driver for this mapping |
||
| 324 | * |
||
| 325 | * @param string $driver |
||
| 326 | */ |
||
| 327 | public function setDriver($driver) |
||
| 331 | |||
| 332 | /** |
||
| 333 | * Get the Driver for this mapping. |
||
| 334 | * |
||
| 335 | * @return string |
||
| 336 | */ |
||
| 337 | public function getDriver() |
||
| 341 | |||
| 342 | /** |
||
| 343 | * Set the db connection to use on the table |
||
| 344 | * |
||
| 345 | * @param $connection |
||
| 346 | */ |
||
| 347 | public function setConnection($connection) |
||
| 351 | |||
| 352 | /** |
||
| 353 | * Get the Database connection the Entity is stored on. |
||
| 354 | * |
||
| 355 | * @return string |
||
| 356 | */ |
||
| 357 | public function getConnection() |
||
| 361 | |||
| 362 | /** |
||
| 363 | * Get the table associated with the entity. |
||
| 364 | * |
||
| 365 | * @return string |
||
| 366 | */ |
||
| 367 | public function getTable() |
||
| 375 | |||
| 376 | /** |
||
| 377 | * Set the database table name |
||
| 378 | * |
||
| 379 | * @param string $table |
||
| 380 | */ |
||
| 381 | public function setTable($table) |
||
| 385 | |||
| 386 | /** |
||
| 387 | * Get the pgSql sequence name |
||
| 388 | * |
||
| 389 | * @return string |
||
| 390 | */ |
||
| 391 | public function getSequence() |
||
| 399 | |||
| 400 | /** |
||
| 401 | * Get the custom entity class |
||
| 402 | * |
||
| 403 | * @return string namespaced class name |
||
| 404 | */ |
||
| 405 | public function getClass() |
||
| 409 | |||
| 410 | /** |
||
| 411 | * Set the custom entity class |
||
| 412 | * |
||
| 413 | * @param string $class namespaced class name |
||
| 414 | */ |
||
| 415 | public function setClass($class) |
||
| 421 | |||
| 422 | /** |
||
| 423 | * Get the embedded Value Objects |
||
| 424 | * |
||
| 425 | * @return array |
||
| 426 | */ |
||
| 427 | public function getEmbeddables() |
||
| 431 | |||
| 432 | /** |
||
| 433 | * Set the embedded Value Objects |
||
| 434 | * |
||
| 435 | * @param array $embeddables |
||
| 436 | */ |
||
| 437 | public function setEmbeddables(array $embeddables) |
||
| 441 | |||
| 442 | /** |
||
| 443 | * Get the relationships to map on a custom domain |
||
| 444 | * class. |
||
| 445 | * |
||
| 446 | * @return array |
||
| 447 | */ |
||
| 448 | public function getRelationships() |
||
| 452 | |||
| 453 | /** |
||
| 454 | * Relationships of the Entity type |
||
| 455 | * |
||
| 456 | * @return array |
||
| 457 | */ |
||
| 458 | public function getSingleRelationships() |
||
| 462 | |||
| 463 | /** |
||
| 464 | * Relationships of type Collection |
||
| 465 | * |
||
| 466 | * @return array |
||
| 467 | */ |
||
| 468 | public function getManyRelationships() |
||
| 472 | |||
| 473 | /** |
||
| 474 | * Relationships with foreign key in the mapped entity record. |
||
| 475 | * |
||
| 476 | * @return array |
||
| 477 | */ |
||
| 478 | public function getLocalRelationships() |
||
| 482 | |||
| 483 | /** |
||
| 484 | * Relationships with foreign key in the related Entity record |
||
| 485 | * |
||
| 486 | * @return array |
||
| 487 | */ |
||
| 488 | public function getForeignRelationships() |
||
| 492 | |||
| 493 | /** |
||
| 494 | * Relationships which keys are stored in a pivot record |
||
| 495 | * |
||
| 496 | * @return array |
||
| 497 | */ |
||
| 498 | public function getPivotRelationships() |
||
| 502 | |||
| 503 | /** |
||
| 504 | * Add a Dynamic Relationship method at runtime. This has to be done |
||
| 505 | * by hooking the 'initializing' event, before entityMap is initialized. |
||
| 506 | * |
||
| 507 | * @param string $name Relation name |
||
| 508 | * @param \Closure $relationship |
||
| 509 | * |
||
| 510 | * @return void |
||
| 511 | */ |
||
| 512 | public function addRelationshipMethod($name, \Closure $relationship) |
||
| 516 | |||
| 517 | /** |
||
| 518 | * Get the dynamic relationship method names. |
||
| 519 | * |
||
| 520 | * @return array |
||
| 521 | */ |
||
| 522 | public function getDynamicRelationships() |
||
| 526 | |||
| 527 | /** |
||
| 528 | * Get the relationships that have to be eager loaded |
||
| 529 | * on each request. |
||
| 530 | * |
||
| 531 | * @return array |
||
| 532 | */ |
||
| 533 | public function getEagerloadedRelationships() |
||
| 537 | |||
| 538 | /** |
||
| 539 | * Get the primary key for the entity. |
||
| 540 | * |
||
| 541 | * @return string |
||
| 542 | */ |
||
| 543 | public function getKeyName() |
||
| 547 | |||
| 548 | /** |
||
| 549 | * Set the primary key for the entity. |
||
| 550 | * |
||
| 551 | * @param $key |
||
| 552 | * @return void |
||
| 553 | */ |
||
| 554 | public function setKeyName($key) |
||
| 558 | |||
| 559 | /** |
||
| 560 | * Get the table qualified key name. |
||
| 561 | * |
||
| 562 | * @return string |
||
| 563 | */ |
||
| 564 | public function getQualifiedKeyName() |
||
| 568 | |||
| 569 | /** |
||
| 570 | * Get the number of models to return per page. |
||
| 571 | * |
||
| 572 | * @return int |
||
| 573 | */ |
||
| 574 | public function getPerPage() |
||
| 578 | |||
| 579 | /** |
||
| 580 | * Set the number of models to return per page. |
||
| 581 | * |
||
| 582 | * @param int $perPage |
||
| 583 | * @return void |
||
| 584 | */ |
||
| 585 | public function setPerPage($perPage) |
||
| 589 | |||
| 590 | /** |
||
| 591 | * Determine if the entity uses get. |
||
| 592 | * |
||
| 593 | * @return bool |
||
| 594 | */ |
||
| 595 | public function usesTimestamps() |
||
| 599 | |||
| 600 | /** |
||
| 601 | * Determine if the entity uses soft deletes |
||
| 602 | * |
||
| 603 | * @return bool |
||
| 604 | */ |
||
| 605 | public function usesSoftDeletes() |
||
| 609 | |||
| 610 | /** |
||
| 611 | * Get the 'created_at' column name |
||
| 612 | * |
||
| 613 | * @return string |
||
| 614 | */ |
||
| 615 | public function getCreatedAtColumn() |
||
| 619 | |||
| 620 | /** |
||
| 621 | * Get the 'updated_at' column name |
||
| 622 | * |
||
| 623 | * @return string |
||
| 624 | */ |
||
| 625 | public function getUpdatedAtColumn() |
||
| 629 | |||
| 630 | /** |
||
| 631 | * Get the deleted_at column |
||
| 632 | * |
||
| 633 | * @return string |
||
| 634 | */ |
||
| 635 | public function getQualifiedDeletedAtColumn() |
||
| 639 | |||
| 640 | /** |
||
| 641 | * Get the default foreign key name for the model. |
||
| 642 | * |
||
| 643 | * @return string |
||
| 644 | */ |
||
| 645 | public function getForeignKey() |
||
| 649 | |||
| 650 | /** |
||
| 651 | * Define a one-to-one relationship. |
||
| 652 | * |
||
| 653 | * @param $entity |
||
| 654 | * @param string $relatedClass entity class |
||
| 655 | * @param string $foreignKey |
||
| 656 | * @param string $localKey |
||
| 657 | * @throws MappingException |
||
| 658 | * @return \Analogue\ORM\Relationships\HasOne |
||
| 659 | */ |
||
| 660 | View Code Duplication | public function hasOne($entity, $relatedClass, $foreignKey = null, $localKey = null) |
|
| 672 | |||
| 673 | /** |
||
| 674 | * Define a polymorphic one-to-one relationship. |
||
| 675 | * |
||
| 676 | * @param mixed $entity |
||
| 677 | * @param string $related |
||
| 678 | * @param string $name |
||
| 679 | * @param string|null $type |
||
| 680 | * @param string|null $id |
||
| 681 | * @param string|null $localKey |
||
| 682 | * @throws MappingException |
||
| 683 | * @return \Analogue\ORM\Relationships\MorphOne |
||
| 684 | */ |
||
| 685 | View Code Duplication | public function morphOne($entity, $related, $name, $type = null, $id = null, $localKey = null) |
|
| 697 | |||
| 698 | /** |
||
| 699 | * Define an inverse one-to-one or many relationship. |
||
| 700 | * |
||
| 701 | * @param mixed $entity |
||
| 702 | * @param string $related |
||
| 703 | * @param string|null $foreignKey |
||
| 704 | * @param string|null $otherKey |
||
| 705 | * @param string|null $relation |
||
| 706 | * @throws MappingException |
||
| 707 | * @return \Analogue\ORM\Relationships\BelongsTo |
||
| 708 | */ |
||
| 709 | public function belongsTo($entity, $related, $foreignKey = null, $otherKey = null, $relation = null) |
||
| 733 | |||
| 734 | /** |
||
| 735 | * Define a polymorphic, inverse one-to-one or many relationship. |
||
| 736 | * |
||
| 737 | * @param mixed $entity |
||
| 738 | * @param string|null $name |
||
| 739 | * @param string|null $type |
||
| 740 | * @param string|null $id |
||
| 741 | * @throws MappingException |
||
| 742 | * @return \Analogue\ORM\Relationships\MorphTo |
||
| 743 | */ |
||
| 744 | public function morphTo($entity, $name = null, $type = null, $id = null) |
||
| 785 | |||
| 786 | /** |
||
| 787 | * Define a one-to-many relationship. |
||
| 788 | * |
||
| 789 | * @param mixed $entity |
||
| 790 | * @param string $related |
||
| 791 | * @param string|null $foreignKey |
||
| 792 | * @param string|null $localKey |
||
| 793 | * @throws MappingException |
||
| 794 | * @return \Analogue\ORM\Relationships\HasMany |
||
| 795 | */ |
||
| 796 | View Code Duplication | public function hasMany($entity, $related, $foreignKey = null, $localKey = null) |
|
| 808 | |||
| 809 | /** |
||
| 810 | * Define a has-many-through relationship. |
||
| 811 | * |
||
| 812 | * @param mixed $entity |
||
| 813 | * @param string $related |
||
| 814 | * @param string $through |
||
| 815 | * @param string|null $firstKey |
||
| 816 | * @param string|null $secondKey |
||
| 817 | * @throws MappingException |
||
| 818 | * @return \Analogue\ORM\Relationships\HasManyThrough |
||
| 819 | */ |
||
| 820 | public function hasManyThrough($entity, $related, $through, $firstKey = null, $secondKey = null) |
||
| 835 | |||
| 836 | /** |
||
| 837 | * Define a polymorphic one-to-many relationship. |
||
| 838 | * |
||
| 839 | * @param mixed $entity |
||
| 840 | * @param string $related |
||
| 841 | * @param string $name |
||
| 842 | * @param string|null $type |
||
| 843 | * @param string|null $id |
||
| 844 | * @param string|null $localKey |
||
| 845 | * @return \Analogue\ORM\Relationships\MorphMany |
||
| 846 | */ |
||
| 847 | View Code Duplication | public function morphMany($entity, $related, $name, $type = null, $id = null, $localKey = null) |
|
| 862 | |||
| 863 | /** |
||
| 864 | * Define a many-to-many relationship. |
||
| 865 | * |
||
| 866 | * @param mixed $entity |
||
| 867 | * @param string $related |
||
| 868 | * @param string|null $table |
||
| 869 | * @param string|null $foreignKey |
||
| 870 | * @param string|null $otherKey |
||
| 871 | * @param string|null $relation |
||
| 872 | * @throws MappingException |
||
| 873 | * @return \Analogue\ORM\Relationships\BelongsToMany |
||
| 874 | */ |
||
| 875 | public function belongsToMany($entity, $related, $table = null, $foreignKey = null, $otherKey = null, $relation = null) |
||
| 904 | |||
| 905 | /** |
||
| 906 | * Define a polymorphic many-to-many relationship. |
||
| 907 | * |
||
| 908 | * @param mixed $entity |
||
| 909 | * @param string $related |
||
| 910 | * @param string $name |
||
| 911 | * @param string|null $table |
||
| 912 | * @param string|null $foreignKey |
||
| 913 | * @param string|null $otherKey |
||
| 914 | * @param bool $inverse |
||
| 915 | * @throws MappingException |
||
| 916 | * @return \Analogue\ORM\Relationships\MorphToMany |
||
| 917 | */ |
||
| 918 | public function morphToMany($entity, $related, $name, $table = null, $foreignKey = null, $otherKey = null, $inverse = false) |
||
| 935 | |||
| 936 | /** |
||
| 937 | * Define a polymorphic, inverse many-to-many relationship. |
||
| 938 | * |
||
| 939 | * @param mixed $entity |
||
| 940 | * @param string $related |
||
| 941 | * @param string $name |
||
| 942 | * @param string|null $table |
||
| 943 | * @param string|null $foreignKey |
||
| 944 | * @param string|null $otherKey |
||
| 945 | * @throws MappingException |
||
| 946 | * @return \Analogue\ORM\Relationships\MorphToMany |
||
| 947 | */ |
||
| 948 | public function morphedByMany($entity, $related, $name, $table = null, $foreignKey = null, $otherKey = null) |
||
| 959 | |||
| 960 | /** |
||
| 961 | * Get the relationship name of the belongs to many. |
||
| 962 | * |
||
| 963 | * @return string |
||
| 964 | */ |
||
| 965 | protected function getBelongsToManyCaller() |
||
| 977 | |||
| 978 | /** |
||
| 979 | * Get the joining table name for a many-to-many relation. |
||
| 980 | * |
||
| 981 | * @param EntityMap $relatedMap |
||
| 982 | * @return string |
||
| 983 | */ |
||
| 984 | public function joiningTable($relatedMap) |
||
| 1002 | |||
| 1003 | /** |
||
| 1004 | * Get the polymorphic relationship columns. |
||
| 1005 | * |
||
| 1006 | * @param string $name |
||
| 1007 | * @param string $type |
||
| 1008 | * @param string $id |
||
| 1009 | * @return string[] |
||
| 1010 | */ |
||
| 1011 | protected function getMorphs($name, $type, $id) |
||
| 1019 | |||
| 1020 | /** |
||
| 1021 | * Get the class name for polymorphic relations. |
||
| 1022 | * |
||
| 1023 | * @return string |
||
| 1024 | */ |
||
| 1025 | public function getMorphClass() |
||
| 1030 | |||
| 1031 | /** |
||
| 1032 | * Create a new Entity Collection instance. |
||
| 1033 | * |
||
| 1034 | * @param array $entities |
||
| 1035 | * @return \Analogue\ORM\EntityCollection |
||
| 1036 | */ |
||
| 1037 | public function newCollection(array $entities = []) |
||
| 1041 | |||
| 1042 | /** |
||
| 1043 | * Process EntityMap parsing at initialization time |
||
| 1044 | * |
||
| 1045 | * @return void |
||
| 1046 | */ |
||
| 1047 | public function initialize() |
||
| 1061 | |||
| 1062 | /** |
||
| 1063 | * Parse every relationships on the EntityMap and sort |
||
| 1064 | * them by type. |
||
| 1065 | * |
||
| 1066 | * @return void |
||
| 1067 | */ |
||
| 1068 | public function boot() |
||
| 1074 | |||
| 1075 | /** |
||
| 1076 | * Get Methods that has been added in the child class. |
||
| 1077 | * |
||
| 1078 | * @return array |
||
| 1079 | */ |
||
| 1080 | protected function getCustomMethods() |
||
| 1088 | |||
| 1089 | /** |
||
| 1090 | * Parse user's class methods for relationships |
||
| 1091 | * |
||
| 1092 | * @param array $customMethods |
||
| 1093 | * @return array |
||
| 1094 | */ |
||
| 1095 | protected function parseMethodsForRelationship(array $customMethods) |
||
| 1120 | |||
| 1121 | /** |
||
| 1122 | * Sort Relationships methods by type |
||
| 1123 | * |
||
| 1124 | * @return void |
||
| 1125 | */ |
||
| 1126 | protected function sortRelationshipsByType() |
||
| 1159 | |||
| 1160 | /** |
||
| 1161 | * Override this method for custom entity instantiation |
||
| 1162 | * |
||
| 1163 | * @return null |
||
| 1164 | */ |
||
| 1165 | public function activator() |
||
| 1169 | |||
| 1170 | /** |
||
| 1171 | * Call dynamic relationship, if it exists |
||
| 1172 | * |
||
| 1173 | * @param string $method |
||
| 1174 | * @param array $parameters |
||
| 1175 | * @throws Exception |
||
| 1176 | * @return mixed |
||
| 1177 | */ |
||
| 1178 | public function __call($method, $parameters) |
||
| 1189 | |||
| 1190 | /** |
||
| 1191 | * Maps the names of the column names to the appropriate attributes |
||
| 1192 | * of an entity if the $attributes property of an EntityMap is an |
||
| 1193 | * associative array. |
||
| 1194 | * |
||
| 1195 | * @param array $array |
||
| 1196 | * @return array |
||
| 1197 | */ |
||
| 1198 | View Code Duplication | public function mapColumnsToAttributes($array) |
|
| 1221 | |||
| 1222 | /** |
||
| 1223 | * Gets the entity attribute name of a given column in a table |
||
| 1224 | * |
||
| 1225 | * @param string $column_name |
||
| 1226 | * @return string |
||
| 1227 | */ |
||
| 1228 | public function getAttributeNameForColumn($column_name) |
||
| 1240 | |||
| 1241 | /** |
||
| 1242 | * Gets the column name of a given entity attribute |
||
| 1243 | * |
||
| 1244 | * @param string $column_name |
||
| 1245 | * @return string |
||
| 1246 | */ |
||
| 1247 | public function getColumnNameForAttribute($attribute_name) |
||
| 1260 | |||
| 1261 | /** |
||
| 1262 | * Maps the attribute names of an entity to the appropriate |
||
| 1263 | * column names in the database if the $attributes property of |
||
| 1264 | * an EntityMap is an associative array. |
||
| 1265 | * |
||
| 1266 | * @param array $array |
||
| 1267 | * @return array |
||
| 1268 | */ |
||
| 1269 | View Code Duplication | public function mapAttributesToColumns($array) |
|
| 1286 | |||
| 1287 | public function hasAttribute($attribute) |
||
| 1297 | } |
||
| 1298 |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.