diff --git a/Tests/Integration/Delete/EntryTest.php b/Tests/Integration/Delete/EntryTest.php index 071f3ad61f202f741f836c3f0816ba8220e6d800..fa8b577b96ce7461bb326ab60da00e7934a57b61 100644 --- a/Tests/Integration/Delete/EntryTest.php +++ b/Tests/Integration/Delete/EntryTest.php @@ -4,6 +4,7 @@ namespace calderawp\CalderaFormsQuery\Tests\Integration\Delete; +use calderawp\CalderaFormsQuery\Delete\Entry; use calderawp\CalderaFormsQuery\Tests\Integration\IntegrationTestCase; class EntryTest extends IntegrationTestCase @@ -159,7 +160,41 @@ class EntryTest extends IntegrationTestCase ) )); + } + + /** + * Test querying by IDs + * + * @covers Entry::deleteByEntryIds() + */ + public function testByEntryIds() + { + $entryIdOne = $this->createEntryWithMockFormAndGetEntryId(); + $entryIdTwo = $this->createEntryWithMockFormAndGetEntryId(); + $entryIdThree = $this->createEntryWithMockFormAndGetEntryId(); + + //Delete results IN One and Three + $entryGenerator = $this->entryDeleteGeneratorFactory(); + $sql = $entryGenerator->deleteByEntryIds( [ + $entryIdOne, + $entryIdThree + ]) + ->getPreparedSql(); + $this->queryWithWPDB($sql); + + //Query for entry Two expect 1 result + $entryGenerator = $this->entryGeneratorFactory(); + $sql = $entryGenerator->queryByEntryId($entryIdTwo) + ->getPreparedSql(); + $results = $this->queryWithWPDB( $sql ); + $this->assertSame( 1, count( $results ) ); + //Query for entry One expect 0 result + $entryGenerator = $this->entryGeneratorFactory(); + $sql = $entryGenerator->queryByEntryId($entryIdOne) + ->getPreparedSql(); + $results = $this->queryWithWPDB( $sql ); + $this->assertSame( 0, count( $results ) ); } diff --git a/src/Delete/Entry.php b/src/Delete/Entry.php index edbf8826ad3014141b7a51271cda5653231837c6..28d6434353304b84451838491db170c758491678 100644 --- a/src/Delete/Entry.php +++ b/src/Delete/Entry.php @@ -28,6 +28,17 @@ class Entry extends DeleteQueryBuilder return $this->is('id', $entryId); } + /** + * Delete an array of entries + * + * @param array $entryIds + * @return $this + */ + public function deleteByEntryIds(array $entryIds) + { + return $this->in($entryIds); + } + /** * Delete entries belonging to a specific user ID * diff --git a/src/Exceptions/Exception.php b/src/Exceptions/Exception.php new file mode 100644 index 0000000000000000000000000000000000000000..6303effeab98c12c0ff0e2952cd18e09a3cc7180 --- /dev/null +++ b/src/Exceptions/Exception.php @@ -0,0 +1,8 @@ +<?php + +namespace calderawp\CalderaFormsQuery\Exceptions; + +class Exception extends \Exception +{ + +} \ No newline at end of file diff --git a/src/QueryBuilder.php b/src/QueryBuilder.php index 3a9a311cddd15a7e2343cd4a887177805361153d..6dc87a880b700cf80ce9995ea81ff8d54444ec2a 100644 --- a/src/QueryBuilder.php +++ b/src/QueryBuilder.php @@ -3,7 +3,7 @@ namespace calderawp\CalderaFormsQuery; -use calderawp\CalderaFormsQuery\Select\DoesSelectQuery; +use calderawp\CalderaFormsQuery\Exceptions\Exception; use NilPortugues\Sql\QueryBuilder\Manipulation\AbstractBaseQuery; /** @@ -94,12 +94,17 @@ abstract class QueryBuilder implements CreatesSqlQueries * * @param string $sql SQL query with substitutions * @return string + * @throws Exception */ protected function substituteValues($sql) { $values = $this->getBuilder()->getValues(); foreach ($values as $identifier => $value) { - $values[$identifier] = $this->surroundValue($value); + if (is_array( $value ) || is_object( $value ) ) { + continue; + } else { + $values[$identifier] = $this->surroundValue($value); + } } return str_replace(array_keys($values), array_values($values), $sql); } @@ -153,4 +158,19 @@ abstract class QueryBuilder implements CreatesSqlQueries { return $this->substituteValues($this->getBuilder()->write($this->getCurrentQuery())); } + + /** + * Add a WHERE IN() + * + * @param array $entryIds + * @return $this + */ + protected function in(array $entryIds) + { + $this + ->getCurrentQuery() + ->where() + ->in('id', $entryIds); + return $this; + } } diff --git a/src/Select/Entry.php b/src/Select/Entry.php index 7aa28248bd48923b3044a2ad568a52b5374fec8b..c1fea3098c3ec62f2596cc4a9158612ea4c9e98d 100644 --- a/src/Select/Entry.php +++ b/src/Select/Entry.php @@ -42,11 +42,7 @@ class Entry extends SelectQueryBuilder */ public function queryByEntryIds(array $entryIds) { - $this - ->getSelectQuery() - ->where() - ->in( 'id', $entryIds ); - return $this; + return $this->in($entryIds); } /** @@ -59,4 +55,6 @@ class Entry extends SelectQueryBuilder { return $this->is('user_id', $userId); } + + } diff --git a/src/Select/SelectQueryBuilder.php b/src/Select/SelectQueryBuilder.php index eb45d074344e3c2efb45487a320e3a33e0d3ad17..9c066243732a78d22a0296f6ddd744dff57c645a 100644 --- a/src/Select/SelectQueryBuilder.php +++ b/src/Select/SelectQueryBuilder.php @@ -3,11 +3,7 @@ namespace calderawp\CalderaFormsQuery\Select; -use calderawp\CalderaFormsQuery\CreatesSqlQueries; -use calderawp\CalderaFormsQuery\MySqlBuilder; use calderawp\CalderaFormsQuery\QueryBuilder; -use NilPortugues\Sql\QueryBuilder\Manipulation\AbstractBaseQuery; -use NilPortugues\Sql\QueryBuilder\Manipulation\Delete; use NilPortugues\Sql\QueryBuilder\Manipulation\Select; abstract class SelectQueryBuilder extends QueryBuilder implements DoesSelectQuery @@ -56,8 +52,12 @@ abstract class SelectQueryBuilder extends QueryBuilder implements DoesSelectQuer return $this; } + /** + * Set new query in selectQuery prop + */ private function setNewQuery() { $this->selectQuery = new \NilPortugues\Sql\QueryBuilder\Manipulation\Select($this->getTableName()); } + }