Extends Database Library |
Hello,
I'm trying to extend the database library in order to "prepare" all the queries (raw and generated by builder); in this method I'll take care of virtual views names replacement. For example this query: Code: SELECT 1 FROM @vw_users@ LIMIT 10; Will turn into this: Code: SELECT Based on this definition: PHP Code: $views["vw_users"] = I already read the answer posted by kilishan at https://forum.codeigniter.com/thread-741...#pid366477 but I can't resign myself to that. How can I achieved this like I did it in CI3 extending core classes? Regards.
You're on your own for now! If you come up for an elegant solution, please share it There are plans to rework the database layer, likely with support for NoSQL and to make extensions easier, but for now there is no easy way to do this.
Hello,
After several attempts, the only way it works is extending all the MySQLi driver like kilishan says in his referenced reply. Here I show some code detail of my solution. I created a folder "MySQLi" inside App/Database, and then created all the files listed (extending the original driver provided):
PHP Code: <?php namespace App\Database\MySQLi; Particularly I just needed to customize the "execute" and "query" method in Connection.php file. All the other files stays same as the original one (by extending of course, like Builder.php example), but I must be present at the same folder. The last step is to point the database driver to the defined in \App\Database\MySQLi. The file to edit is App/Config/Database.php, it also works with the .env file. PHP Code: 'DBDriver' => '\App\Database\MySQLi', Regards. (04-16-2020, 10:05 AM)emaidana Wrote: Hello,Thank you! For some reason this is not described in the official documentation. I wanted to be able to reset only part of the query (for example only the Having clause, not the entire query) and to be able to clone the builder - in case I want to have to similar queries one after another. For those who are about to encounter this issue: Create a new folder in App\Database\MySQLi. Copy all files from vendor\codeigniter4\framework\system\Database\MySQLi there and delete their content - in case CodeIgniter gets updated, we wouldn't want to use old code. Then open each file and replace the content with something similar to this one: Code: <?php Unfortunately it will work only for the MySQLi driver and I wanted it to work for the BaseBuilder class, but that's the limitation I'm willing to work with. ps: If somebody is interested, here is my extended MySQLi/Builder class: Code: <?php |
Welcome Guest, Not a member yet? Register Sign In |