mirror of
https://github.com/torrentpier/torrentpier-lts.git
synced 2025-03-01 15:21:02 +03:00
86 lines
2.3 KiB
PHP
86 lines
2.3 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Zend Framework (http://framework.zend.com/)
|
||
|
*
|
||
|
* @link http://github.com/zendframework/zf2 for the canonical source repository
|
||
|
* @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
|
||
|
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||
|
*/
|
||
|
|
||
|
namespace Zend\Db\TableGateway\Feature;
|
||
|
|
||
|
use Zend\Db\Metadata\Metadata;
|
||
|
use Zend\Db\Metadata\MetadataInterface;
|
||
|
use Zend\Db\TableGateway\Exception;
|
||
|
use Zend\Db\Metadata\Object\TableObject;
|
||
|
|
||
|
class MetadataFeature extends AbstractFeature
|
||
|
{
|
||
|
/**
|
||
|
* @var MetadataInterface
|
||
|
*/
|
||
|
protected $metadata = null;
|
||
|
|
||
|
/**
|
||
|
* Constructor
|
||
|
*
|
||
|
* @param MetadataInterface $metadata
|
||
|
*/
|
||
|
public function __construct(MetadataInterface $metadata = null)
|
||
|
{
|
||
|
if ($metadata) {
|
||
|
$this->metadata = $metadata;
|
||
|
}
|
||
|
$this->sharedData['metadata'] = array(
|
||
|
'primaryKey' => null,
|
||
|
'columns' => array()
|
||
|
);
|
||
|
}
|
||
|
|
||
|
public function postInitialize()
|
||
|
{
|
||
|
if ($this->metadata == null) {
|
||
|
$this->metadata = new Metadata($this->tableGateway->adapter);
|
||
|
}
|
||
|
|
||
|
// localize variable for brevity
|
||
|
$t = $this->tableGateway;
|
||
|
$m = $this->metadata;
|
||
|
|
||
|
// get column named
|
||
|
$columns = $m->getColumnNames($t->table);
|
||
|
$t->columns = $columns;
|
||
|
|
||
|
// set locally
|
||
|
$this->sharedData['metadata']['columns'] = $columns;
|
||
|
|
||
|
// process primary key only if table is a table; there are no PK constraints on views
|
||
|
if (!($m->getTable($t->table) instanceof TableObject)) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$pkc = null;
|
||
|
|
||
|
foreach ($m->getConstraints($t->table) as $constraint) {
|
||
|
/** @var $constraint \Zend\Db\Metadata\Object\ConstraintObject */
|
||
|
if ($constraint->getType() == 'PRIMARY KEY') {
|
||
|
$pkc = $constraint;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ($pkc === null) {
|
||
|
throw new Exception\RuntimeException('A primary key for this column could not be found in the metadata.');
|
||
|
}
|
||
|
|
||
|
if (count($pkc->getColumns()) == 1) {
|
||
|
$pkck = $pkc->getColumns();
|
||
|
$primaryKey = $pkck[0];
|
||
|
} else {
|
||
|
$primaryKey = $pkc->getColumns();
|
||
|
}
|
||
|
|
||
|
$this->sharedData['metadata']['primaryKey'] = $primaryKey;
|
||
|
}
|
||
|
}
|