53 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php declare(strict_types=1);
 | |
| 
 | |
| namespace BitBadger\PDODocument;
 | |
| 
 | |
| use PDO;
 | |
| 
 | |
| /**
 | |
|  * Functions that apply at a whole document level
 | |
|  */
 | |
| class Document
 | |
| {
 | |
|     /**
 | |
|      * Insert a new document
 | |
|      *
 | |
|      * @param string $tableName The name of the table into which the document should be inserted
 | |
|      * @param array|object $document The document to be inserted
 | |
|      * @param PDO|null $pdo The database connection to use (optional; will obtain one if not provided)
 | |
|      * @throws DocumentException If any is encountered
 | |
|      */
 | |
|     public static function insert(string $tableName, array|object $document, ?PDO $pdo = null): void
 | |
|     {
 | |
|         Custom::nonQuery(Query::insert($tableName), Parameters::json('@data', $document), $pdo);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Save a document, inserting it if it does not exist and updating it if it does (AKA "upsert")
 | |
|      *
 | |
|      * @param string $tableName The name of the table to which the document should be saved
 | |
|      * @param array|object $document The document to be saved
 | |
|      * @param PDO|null $pdo The database connection to use (optional; will obtain one if not provided)
 | |
|      * @throws DocumentException If any is encountered
 | |
|      */
 | |
|     public static function save(string $tableName, array|object $document, ?PDO $pdo = null): void
 | |
|     {
 | |
|         Custom::nonQuery(Query::save($tableName), Parameters::json('@data', $document), $pdo);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Update (replace) an entire document by its ID
 | |
|      *
 | |
|      * @param string $tableName The table in which the document should be updated
 | |
|      * @param mixed $docId The ID of the document to be updated
 | |
|      * @param array|object $document The document to be updated
 | |
|      * @param PDO|null $pdo The database connection to use (optional; will obtain one if not provided)
 | |
|      * @throws DocumentException If any is encountered
 | |
|      */
 | |
|     public static function update(string $tableName, mixed $docId, array|object $document, ?PDO $pdo = null): void
 | |
|     {
 | |
|         Custom::nonQuery(Query::update($tableName),
 | |
|             array_merge(Parameters::id($docId), Parameters::json('@data', $document)), $pdo);
 | |
|     }
 | |
| }
 |