Laravel testing function to see any changes in a database












-2















I need a function that would give me a list of tables and records that was done by some php code. This function is going to be executed from a unit test.



My idea to set a time by a Carbon, execute some php code, and then run this function that would get a list of all the tables in the database and run a select for each table looking for the specific date at created-at and updated-at fields..



Than it returns a collection of records created in the batabase grouped by table name.



Alternatively, if I'd be happy to get a list of modifications made by database transaction.



I don't know if such function exists somewhere on MySQL level or maybe in Laravel, or PHPUnit.



If it doesn't exist, please help me write it. Thank you.










share|improve this question



























    -2















    I need a function that would give me a list of tables and records that was done by some php code. This function is going to be executed from a unit test.



    My idea to set a time by a Carbon, execute some php code, and then run this function that would get a list of all the tables in the database and run a select for each table looking for the specific date at created-at and updated-at fields..



    Than it returns a collection of records created in the batabase grouped by table name.



    Alternatively, if I'd be happy to get a list of modifications made by database transaction.



    I don't know if such function exists somewhere on MySQL level or maybe in Laravel, or PHPUnit.



    If it doesn't exist, please help me write it. Thank you.










    share|improve this question

























      -2












      -2








      -2








      I need a function that would give me a list of tables and records that was done by some php code. This function is going to be executed from a unit test.



      My idea to set a time by a Carbon, execute some php code, and then run this function that would get a list of all the tables in the database and run a select for each table looking for the specific date at created-at and updated-at fields..



      Than it returns a collection of records created in the batabase grouped by table name.



      Alternatively, if I'd be happy to get a list of modifications made by database transaction.



      I don't know if such function exists somewhere on MySQL level or maybe in Laravel, or PHPUnit.



      If it doesn't exist, please help me write it. Thank you.










      share|improve this question














      I need a function that would give me a list of tables and records that was done by some php code. This function is going to be executed from a unit test.



      My idea to set a time by a Carbon, execute some php code, and then run this function that would get a list of all the tables in the database and run a select for each table looking for the specific date at created-at and updated-at fields..



      Than it returns a collection of records created in the batabase grouped by table name.



      Alternatively, if I'd be happy to get a list of modifications made by database transaction.



      I don't know if such function exists somewhere on MySQL level or maybe in Laravel, or PHPUnit.



      If it doesn't exist, please help me write it. Thank you.







      mysql laravel-5 phpunit






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Dec 31 '18 at 23:26









      Yevgeniy AfanasyevYevgeniy Afanasyev

      8,75455272




      8,75455272
























          1 Answer
          1






          active

          oldest

          votes


















          0














          This is how I solve it now:



          Function



          function databaseChanges(Carbon $dateTime): array
          {
          $schema = config('database.connections.mysql.database');
          $tables = DB::select(
          "
          SELECT `table_name`
          FROM `information_schema`.`tables`
          WHERE true
          AND `table_type` = 'base table'
          AND `table_schema`= ?
          "
          , [$schema]
          );
          $result = ;
          foreach ($tables as $table) {
          try {
          $records = DB::table($table->table_name)
          ->select('created_at', 'updated_at')
          ->where('created_at', $dateTime)
          ->orWhere('updated_at', $dateTime)
          ->get();
          if ($records->count() > 0) {
          $result[$table->table_name] = $records;
          }
          } catch (QueryException $ex) {
          //Log::debug(get_class($ex));
          }
          }

          return $result;
          }


          Unit test



          class DataBaseTest extends TestCase
          {

          use DatabaseTransactions;


          public function test_data_base_changes(): void
          {
          $now = Carbon::now();
          Carbon::setTestNow($now); // stop the time

          $user = factory(User::class)->create();

          $changes = databaseChanges($now);

          $this->assertSame(['accounts', 'users'], array_keys($changes));
          }


          }





          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53992113%2flaravel-testing-function-to-see-any-changes-in-a-database%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            This is how I solve it now:



            Function



            function databaseChanges(Carbon $dateTime): array
            {
            $schema = config('database.connections.mysql.database');
            $tables = DB::select(
            "
            SELECT `table_name`
            FROM `information_schema`.`tables`
            WHERE true
            AND `table_type` = 'base table'
            AND `table_schema`= ?
            "
            , [$schema]
            );
            $result = ;
            foreach ($tables as $table) {
            try {
            $records = DB::table($table->table_name)
            ->select('created_at', 'updated_at')
            ->where('created_at', $dateTime)
            ->orWhere('updated_at', $dateTime)
            ->get();
            if ($records->count() > 0) {
            $result[$table->table_name] = $records;
            }
            } catch (QueryException $ex) {
            //Log::debug(get_class($ex));
            }
            }

            return $result;
            }


            Unit test



            class DataBaseTest extends TestCase
            {

            use DatabaseTransactions;


            public function test_data_base_changes(): void
            {
            $now = Carbon::now();
            Carbon::setTestNow($now); // stop the time

            $user = factory(User::class)->create();

            $changes = databaseChanges($now);

            $this->assertSame(['accounts', 'users'], array_keys($changes));
            }


            }





            share|improve this answer




























              0














              This is how I solve it now:



              Function



              function databaseChanges(Carbon $dateTime): array
              {
              $schema = config('database.connections.mysql.database');
              $tables = DB::select(
              "
              SELECT `table_name`
              FROM `information_schema`.`tables`
              WHERE true
              AND `table_type` = 'base table'
              AND `table_schema`= ?
              "
              , [$schema]
              );
              $result = ;
              foreach ($tables as $table) {
              try {
              $records = DB::table($table->table_name)
              ->select('created_at', 'updated_at')
              ->where('created_at', $dateTime)
              ->orWhere('updated_at', $dateTime)
              ->get();
              if ($records->count() > 0) {
              $result[$table->table_name] = $records;
              }
              } catch (QueryException $ex) {
              //Log::debug(get_class($ex));
              }
              }

              return $result;
              }


              Unit test



              class DataBaseTest extends TestCase
              {

              use DatabaseTransactions;


              public function test_data_base_changes(): void
              {
              $now = Carbon::now();
              Carbon::setTestNow($now); // stop the time

              $user = factory(User::class)->create();

              $changes = databaseChanges($now);

              $this->assertSame(['accounts', 'users'], array_keys($changes));
              }


              }





              share|improve this answer


























                0












                0








                0







                This is how I solve it now:



                Function



                function databaseChanges(Carbon $dateTime): array
                {
                $schema = config('database.connections.mysql.database');
                $tables = DB::select(
                "
                SELECT `table_name`
                FROM `information_schema`.`tables`
                WHERE true
                AND `table_type` = 'base table'
                AND `table_schema`= ?
                "
                , [$schema]
                );
                $result = ;
                foreach ($tables as $table) {
                try {
                $records = DB::table($table->table_name)
                ->select('created_at', 'updated_at')
                ->where('created_at', $dateTime)
                ->orWhere('updated_at', $dateTime)
                ->get();
                if ($records->count() > 0) {
                $result[$table->table_name] = $records;
                }
                } catch (QueryException $ex) {
                //Log::debug(get_class($ex));
                }
                }

                return $result;
                }


                Unit test



                class DataBaseTest extends TestCase
                {

                use DatabaseTransactions;


                public function test_data_base_changes(): void
                {
                $now = Carbon::now();
                Carbon::setTestNow($now); // stop the time

                $user = factory(User::class)->create();

                $changes = databaseChanges($now);

                $this->assertSame(['accounts', 'users'], array_keys($changes));
                }


                }





                share|improve this answer













                This is how I solve it now:



                Function



                function databaseChanges(Carbon $dateTime): array
                {
                $schema = config('database.connections.mysql.database');
                $tables = DB::select(
                "
                SELECT `table_name`
                FROM `information_schema`.`tables`
                WHERE true
                AND `table_type` = 'base table'
                AND `table_schema`= ?
                "
                , [$schema]
                );
                $result = ;
                foreach ($tables as $table) {
                try {
                $records = DB::table($table->table_name)
                ->select('created_at', 'updated_at')
                ->where('created_at', $dateTime)
                ->orWhere('updated_at', $dateTime)
                ->get();
                if ($records->count() > 0) {
                $result[$table->table_name] = $records;
                }
                } catch (QueryException $ex) {
                //Log::debug(get_class($ex));
                }
                }

                return $result;
                }


                Unit test



                class DataBaseTest extends TestCase
                {

                use DatabaseTransactions;


                public function test_data_base_changes(): void
                {
                $now = Carbon::now();
                Carbon::setTestNow($now); // stop the time

                $user = factory(User::class)->create();

                $changes = databaseChanges($now);

                $this->assertSame(['accounts', 'users'], array_keys($changes));
                }


                }






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Jan 1 at 22:16









                Yevgeniy AfanasyevYevgeniy Afanasyev

                8,75455272




                8,75455272
































                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53992113%2flaravel-testing-function-to-see-any-changes-in-a-database%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Monofisismo

                    Angular Downloading a file using contenturl with Basic Authentication

                    Olmecas