getMnReferenceDetails() публичный Метод

public getMnReferenceDetails ( $junctionEntity )
 /**
  * Process ParsedQueryData from DELETE query and deletes entity/entities data from Storage.
  * Source parsed query does not contain any special Sql functions (e.g. NOW)
  *
  * @param ParsedQueryData $parsedQueryData
  */
 private function processDeleteQuery($parsedQueryData)
 {
     $entityInfo = $this->dbSchemaInfo->getEntityInfo($parsedQueryData->entityName);
     if (!$entityInfo || !$entityInfo->usesGeneratedVpids) {
         foreach ($parsedQueryData->ids as $ids) {
             $where = [];
             foreach ($parsedQueryData->idColumnsNames as $key => $idColumnName) {
                 $where[$idColumnName] = $ids[$key];
                 $this->vpidRepository->deleteId($parsedQueryData->entityName, $ids[$key]);
             }
             if (!$entityInfo) {
                 $referenceDetails = $this->dbSchemaInfo->getMnReferenceDetails($parsedQueryData->table);
                 if (!$referenceDetails) {
                     return;
                 }
                 $this->deleteReference($referenceDetails, $where);
             } else {
                 $this->mirror->delete($parsedQueryData->entityName, $where);
             }
         }
         return;
     }
     foreach ($parsedQueryData->ids as $ids) {
         $id = $ids[0];
         // Composite primary key is not yet supported.
         $where['vp_id'] = $this->vpidRepository->getVpidForEntity($parsedQueryData->entityName, $id);
         if (!$where['vp_id']) {
             continue;
             // already deleted - deleting postmeta is sometimes called twice
         }
         if ($this->dbSchemaInfo->isChildEntity($parsedQueryData->entityName)) {
             $parentVpReference = "vp_" . $entityInfo->parentReference;
             $where[$parentVpReference] = $this->fillParentId($parsedQueryData->entityName, $entityInfo, $id);
         }
         $this->vpidRepository->deleteId($parsedQueryData->entityName, $id);
         $this->mirror->delete($parsedQueryData->entityName, $where);
     }
 }
Пример #2
0
 /**
  * Returns ID column for a table
  *
  * @param DbSchemaInfo $schema
  * @param string $table
  * @return string[]|null
  */
 private function resolveIdColumns($schema, $table)
 {
     $entity = $schema->getEntityInfoByPrefixedTableName($table);
     if ($entity) {
         return [$entity->idColumnName];
     }
     // Temporary hack for M:N references until VP will support composite PKs
     $referenceDetails = $schema->getMnReferenceDetails($schema->trimPrefix($table));
     if ($referenceDetails) {
         return [$referenceDetails['source-column'], $referenceDetails['target-column']];
     }
     return null;
 }