Can I have 2 tables in codeigniter 4 model? |
Hello
In CI v.3x I used (and I was used it extensively) the following code: Code: public function __construct() So later, in the MyModel I was able to call funciton getWithCategories like this: Code: public function get_with_category ($table_name2 = FALSE, $parent_name = FALSE, $foreign_key = FALSE, $order_by = FALSE) The role of this function was to provide me with the category name for each pair of related tables. In this example I have the faq and faq category name, but I used this for each and every case where I needed to get the category name (news, articles, etc). Is there any way to implement this in CodeIgniter 4? I checked the documentation but I didn't find a way to have 2 tables in one model. Any idea how could I create similar reusable function in CI 4?
I've never used CI3, but I have been able to accomplish what you describe in CI4 by using the standard CI4 model and Entities. Create a method inside your model that joins other tables with your model's table. Then the query's results can be returned as an Entity object by the method where the attributes of that Entity are columns from all of the joined tables.
First create your Entity: https://codeigniter.com/user_guide/models/entities.html. Then, configure the model to return an Entity object instead of the usual array. PHP Code: protected $returnType = 'App\Entities\User'; Create a method that joins multiple tables together in your model. PHP Code: public function byUserID(string $user_id) { In this case, a User entity object is returned where the database columns for all joined tables are attributes. PHP Code: $user_model = new \App\Models\UserModel; //Instantiate model You can also create new methods in your entity to add attributes. PHP Code: public function getFullName() { $user->full_name will automatically call $user->getFullName() and return the result. For this to work properly your method name must begin with "get" and use camel case. CI4 automatically converts the camel case method name to a snake case attribute. (e.g. $entity->getMethodName() translates to $entity->method_name) I hope this helps! Let me know how you make out.
Model is basic for every table
- With real applications are much more complicated, so should use Query Learning CI4 from my works, from errors and how to fix bugs in the community Love CI & Thanks CI Teams
If you use the QueryBuilder you can do it like this.
PHP Code: $builder = $db->table('mytable'); Then when your finished just change it back to the original table for the model. See the builder method in ./system/Model.php What did you Try? What did you Get? What did you Expect?
Joined CodeIgniter Community 2009. ( Skype: insitfx )
Thanks to all members here that find time to replay to my question. For the moment I will stick to method for each model (where needed) and I will see in the future, if I find convenient method as the old one, I will bump this thread with my solution.
Again, thanks for your time.
Hello
I landed on this topic because basically I'd like to use Models for DB methods and the relative queries Well I have a complex query with some joins which require the access to two more tables in the same DB E.G. db name : tickets Model is TicketModel which is set to work with 'ticket' table but in the TicketModel I need to write a method more or less like PHP Code: public function getTicketList() well, how do I "enable" the 'dept' and 'post' tables? Thank you
Use CodeIgniter 4 QueryBuilder class and joins on the different tables.
What did you Try? What did you Get? What did you Expect?
Joined CodeIgniter Community 2009. ( Skype: insitfx )
(05-19-2023, 11:47 PM)InsiteFX Wrote: Use CodeIgniter 4 QueryBuilder class and joins on the different tables. Hello thank you I was reading that section of the guide So you confirm it is possible to join different tables at the Model level using the query builder methods and this task can be accomplished inside the Model Right? Entity Classes may be an alternative or they make no sense in the case of my question? Thank you hinting And , still for learning, third option: aiming to write the RAW query. Wanting to use the RAW query, how do I access the others tables in this model? I tried but I get errors because the others tables looks like not found. R
This shows you how it is done.
stackoverflow -> Codeigniter 4 query builder join 2 or more tables without duplicate result What did you Try? What did you Get? What did you Expect?
Joined CodeIgniter Community 2009. ( Skype: insitfx )
(05-20-2023, 02:45 AM)InsiteFX Wrote: This shows you how it is done. Great thank you Kindly , what about using a RAW query inside the model making that join? I mean , just to understand the mechanic, how would be achieved to access many tables of the same db for those joins? Thank you and thank you for the link |
Welcome Guest, Not a member yet? Register Sign In |