253 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			253 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| declare(strict_types=1);
 | |
| 
 | |
| /**
 | |
|  * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
 | |
|  * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
 | |
|  *
 | |
|  * Licensed under The MIT License
 | |
|  * For full copyright and license information, please see the LICENSE.txt
 | |
|  * Redistributions of files must retain the above copyright notice.
 | |
|  *
 | |
|  * @copyright     Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
 | |
|  * @link          https://cakephp.org CakePHP(tm) Project
 | |
|  * @since         3.0.0
 | |
|  * @license       https://opensource.org/licenses/mit-license.php MIT License
 | |
|  */
 | |
| namespace Cake\Datasource;
 | |
| 
 | |
| /**
 | |
|  * Describes the methods that any class representing a data storage should
 | |
|  * comply with.
 | |
|  */
 | |
| interface RepositoryInterface
 | |
| {
 | |
|     /**
 | |
|      * Sets the repository alias.
 | |
|      *
 | |
|      * @param string $alias Table alias
 | |
|      * @return $this
 | |
|      */
 | |
|     public function setAlias(string $alias);
 | |
| 
 | |
|     /**
 | |
|      * Returns the repository alias.
 | |
|      *
 | |
|      * @return string
 | |
|      */
 | |
|     public function getAlias(): string;
 | |
| 
 | |
|     /**
 | |
|      * Sets the table registry key used to create this table instance.
 | |
|      *
 | |
|      * @param string $registryAlias The key used to access this object.
 | |
|      * @return $this
 | |
|      */
 | |
|     public function setRegistryAlias(string $registryAlias);
 | |
| 
 | |
|     /**
 | |
|      * Returns the table registry key used to create this table instance.
 | |
|      *
 | |
|      * @return string
 | |
|      */
 | |
|     public function getRegistryAlias(): string;
 | |
| 
 | |
|     /**
 | |
|      * Test to see if a Repository has a specific field/column.
 | |
|      *
 | |
|      * @param string $field The field to check for.
 | |
|      * @return bool True if the field exists, false if it does not.
 | |
|      */
 | |
|     public function hasField(string $field): bool;
 | |
| 
 | |
|     /**
 | |
|      * Creates a new Query for this repository and applies some defaults based on the
 | |
|      * type of search that was selected.
 | |
|      *
 | |
|      * @param string $type the type of query to perform
 | |
|      * @param array<string, mixed> $options An array that will be passed to Query::applyOptions()
 | |
|      * @return \Cake\Datasource\QueryInterface
 | |
|      */
 | |
|     public function find(string $type = 'all', array $options = []);
 | |
| 
 | |
|     /**
 | |
|      * Returns a single record after finding it by its primary key, if no record is
 | |
|      * found this method throws an exception.
 | |
|      *
 | |
|      * ### Example:
 | |
|      *
 | |
|      * ```
 | |
|      * $id = 10;
 | |
|      * $article = $articles->get($id);
 | |
|      *
 | |
|      * $article = $articles->get($id, ['contain' => ['Comments]]);
 | |
|      * ```
 | |
|      *
 | |
|      * @param mixed $primaryKey primary key value to find
 | |
|      * @param array<string, mixed> $options options accepted by `Table::find()`
 | |
|      * @throws \Cake\Datasource\Exception\RecordNotFoundException if the record with such id
 | |
|      * could not be found
 | |
|      * @return \Cake\Datasource\EntityInterface
 | |
|      * @see \Cake\Datasource\RepositoryInterface::find()
 | |
|      */
 | |
|     public function get($primaryKey, array $options = []): EntityInterface;
 | |
| 
 | |
|     /**
 | |
|      * Creates a new Query instance for this repository
 | |
|      *
 | |
|      * @return \Cake\Datasource\QueryInterface
 | |
|      */
 | |
|     public function query();
 | |
| 
 | |
|     /**
 | |
|      * Update all matching records.
 | |
|      *
 | |
|      * Sets the $fields to the provided values based on $conditions.
 | |
|      * This method will *not* trigger beforeSave/afterSave events. If you need those
 | |
|      * first load a collection of records and update them.
 | |
|      *
 | |
|      * @param \Cake\Database\Expression\QueryExpression|\Closure|array|string $fields A hash of field => new value.
 | |
|      * @param mixed $conditions Conditions to be used, accepts anything Query::where()
 | |
|      * can take.
 | |
|      * @return int Count Returns the affected rows.
 | |
|      */
 | |
|     public function updateAll($fields, $conditions): int;
 | |
| 
 | |
|     /**
 | |
|      * Deletes all records matching the provided conditions.
 | |
|      *
 | |
|      * This method will *not* trigger beforeDelete/afterDelete events. If you
 | |
|      * need those first load a collection of records and delete them.
 | |
|      *
 | |
|      * This method will *not* execute on associations' `cascade` attribute. You should
 | |
|      * use database foreign keys + ON CASCADE rules if you need cascading deletes combined
 | |
|      * with this method.
 | |
|      *
 | |
|      * @param mixed $conditions Conditions to be used, accepts anything Query::where()
 | |
|      * can take.
 | |
|      * @return int Returns the number of affected rows.
 | |
|      * @see \Cake\Datasource\RepositoryInterface::delete()
 | |
|      */
 | |
|     public function deleteAll($conditions): int;
 | |
| 
 | |
|     /**
 | |
|      * Returns true if there is any record in this repository matching the specified
 | |
|      * conditions.
 | |
|      *
 | |
|      * @param array $conditions list of conditions to pass to the query
 | |
|      * @return bool
 | |
|      */
 | |
|     public function exists($conditions): bool;
 | |
| 
 | |
|     /**
 | |
|      * Persists an entity based on the fields that are marked as dirty and
 | |
|      * returns the same entity after a successful save or false in case
 | |
|      * of any error.
 | |
|      *
 | |
|      * @param \Cake\Datasource\EntityInterface $entity the entity to be saved
 | |
|      * @param \ArrayAccess|array $options The options to use when saving.
 | |
|      * @return \Cake\Datasource\EntityInterface|false
 | |
|      */
 | |
|     public function save(EntityInterface $entity, $options = []);
 | |
| 
 | |
|     /**
 | |
|      * Delete a single entity.
 | |
|      *
 | |
|      * Deletes an entity and possibly related associations from the database
 | |
|      * based on the 'dependent' option used when defining the association.
 | |
|      *
 | |
|      * @param \Cake\Datasource\EntityInterface $entity The entity to remove.
 | |
|      * @param \ArrayAccess|array $options The options for the delete.
 | |
|      * @return bool success
 | |
|      */
 | |
|     public function delete(EntityInterface $entity, $options = []): bool;
 | |
| 
 | |
|     /**
 | |
|      * This creates a new entity object.
 | |
|      *
 | |
|      * Careful: This does not trigger any field validation.
 | |
|      * This entity can be persisted without validation error as empty record.
 | |
|      * Always patch in required fields before saving.
 | |
|      *
 | |
|      * @return \Cake\Datasource\EntityInterface
 | |
|      */
 | |
|     public function newEmptyEntity(): EntityInterface;
 | |
| 
 | |
|     /**
 | |
|      * Create a new entity + associated entities from an array.
 | |
|      *
 | |
|      * This is most useful when hydrating request data back into entities.
 | |
|      * For example, in your controller code:
 | |
|      *
 | |
|      * ```
 | |
|      * $article = $this->Articles->newEntity($this->request->getData());
 | |
|      * ```
 | |
|      *
 | |
|      * The hydrated entity will correctly do an insert/update based
 | |
|      * on the primary key data existing in the database when the entity
 | |
|      * is saved. Until the entity is saved, it will be a detached record.
 | |
|      *
 | |
|      * @param array $data The data to build an entity with.
 | |
|      * @param array<string, mixed> $options A list of options for the object hydration.
 | |
|      * @return \Cake\Datasource\EntityInterface
 | |
|      */
 | |
|     public function newEntity(array $data, array $options = []): EntityInterface;
 | |
| 
 | |
|     /**
 | |
|      * Create a list of entities + associated entities from an array.
 | |
|      *
 | |
|      * This is most useful when hydrating request data back into entities.
 | |
|      * For example, in your controller code:
 | |
|      *
 | |
|      * ```
 | |
|      * $articles = $this->Articles->newEntities($this->request->getData());
 | |
|      * ```
 | |
|      *
 | |
|      * The hydrated entities can then be iterated and saved.
 | |
|      *
 | |
|      * @param array $data The data to build an entity with.
 | |
|      * @param array<string, mixed> $options A list of options for the objects hydration.
 | |
|      * @return array<\Cake\Datasource\EntityInterface> An array of hydrated records.
 | |
|      */
 | |
|     public function newEntities(array $data, array $options = []): array;
 | |
| 
 | |
|     /**
 | |
|      * Merges the passed `$data` into `$entity` respecting the accessible
 | |
|      * fields configured on the entity. Returns the same entity after being
 | |
|      * altered.
 | |
|      *
 | |
|      * This is most useful when editing an existing entity using request data:
 | |
|      *
 | |
|      * ```
 | |
|      * $article = $this->Articles->patchEntity($article, $this->request->getData());
 | |
|      * ```
 | |
|      *
 | |
|      * @param \Cake\Datasource\EntityInterface $entity the entity that will get the
 | |
|      * data merged in
 | |
|      * @param array $data key value list of fields to be merged into the entity
 | |
|      * @param array<string, mixed> $options A list of options for the object hydration.
 | |
|      * @return \Cake\Datasource\EntityInterface
 | |
|      */
 | |
|     public function patchEntity(EntityInterface $entity, array $data, array $options = []): EntityInterface;
 | |
| 
 | |
|     /**
 | |
|      * Merges each of the elements passed in `$data` into the entities
 | |
|      * found in `$entities` respecting the accessible fields configured on the entities.
 | |
|      * Merging is done by matching the primary key in each of the elements in `$data`
 | |
|      * and `$entities`.
 | |
|      *
 | |
|      * This is most useful when editing a list of existing entities using request data:
 | |
|      *
 | |
|      * ```
 | |
|      * $article = $this->Articles->patchEntities($articles, $this->request->getData());
 | |
|      * ```
 | |
|      *
 | |
|      * @param iterable<\Cake\Datasource\EntityInterface> $entities the entities that will get the
 | |
|      * data merged in
 | |
|      * @param array $data list of arrays to be merged into the entities
 | |
|      * @param array<string, mixed> $options A list of options for the objects hydration.
 | |
|      * @return array<\Cake\Datasource\EntityInterface>
 | |
|      */
 | |
|     public function patchEntities(iterable $entities, array $data, array $options = []): array;
 | |
| }
 |