0

I have too many function for database inside one model file

See my example :

<?php
namespace App\Models;
use CodeIgniter\Model;
use Medoo\Medoo;



class DBMedoo extends Model {

    public $database;
    public $maxfolder;
    protected $session;



    function __construct()
    {

        include APPPATH . 'ThirdParty/vendor/autoload.php';     

        $this->session = \Config\Services::session();
        $this->session->start();

        $this->database = new Medoo([
        
        // [required]           
        'type' => 'mysql',
        'host' => 'localhost',
        'database' => 'db_testing',
        'username' => 'root',
        'password' => '',
                

        // [optional]
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_general_ci',
        'port' => 3306,

        // [optional] Table prefix, all table names will be prefixed as PREFIX_table.
        'prefix' => '',

        // [optional] Enable logging, it is disabled by default for better performance.
        'logging' => true,

        // [optional]
        // Error mode
        // Error handling strategies when error is occurred.
        // PDO::ERRMODE_SILENT (default) | PDO::ERRMODE_WARNING | PDO::ERRMODE_EXCEPTION
        // Read more from https://www.php.net/manual/en/pdo.error-handling.php.
        'error' => \PDO::ERRMODE_SILENT,

        // [optional]
        // The driver_option for connection.
        // Read more from http://www.php.net/manual/en/pdo.setattribute.php.
        'option' => [
        \PDO::ATTR_CASE => \PDO::CASE_NATURAL
        ],

        // [optional] Medoo will execute those commands after connected to the database.
        'command' => [
        'SET SQL_MODE=ANSI_QUOTES'
        ]
        ]);

    }


    public function FDatabase() {

        return $this->database;

    }





    public function UpdatePriceAlertPush($idx) {
       $this->FDatabase()->update('tb_apppricealert', [
        'triggered' => 1,
        'ispush' => 1,
        'ipaddress' => $_SERVER['REMOTE_ADDR'],
        'datetime' => date('Y-m-d H:i:s')
         ], [
          'idx' => $idx
         ]);
    }
    
    include 'Ticker.php'; // Here error
    include 'CheckUpdateVersion.php'; // Here error
    // and 50 more.....
    


}

?>

How to separate each public function into every part of file and include in the main model ? In my example above both :

  • include 'Ticker.php'; // Here error
  • include 'CheckUpdateVersion.php'; // Here error

Got error.

This is "Ticker.php"

    <?php
            
            // ================================== TICKER
        
            function InsertTicker($array) {
                $this->FDatabase()->action(function($database)  use (&$array)  {
        
                    $this->FDatabase()->insert('tb_ticker', [
                        'ticker' => $array['ticker'],
                        'company' => $array['company'],
                        'ipaddress' => $_SERVER['REMOTE_ADDR'],
                        'datetime' => date('Y-m-d H:i:s')
                    ]);
        
                    // If you found something wrong, just return false value to rollback the whole transaction.
                    if ($this->FDatabase()->error) {
                        return false;
                    }
                });
            }
        
            
        
            function SelectAllTicker() {
                $Data = $this->FDatabase()->select('tb_ticker', '*');
                return $Data;
            }
        
            
        
            function GetTicker($ticker) {
                $Data = $this->FDatabase()->get('tb_ticker', '*', [
                    'ticker' => $ticker
                ]);
                return $Data;
            }
        
            
        ?>

and this is "CheckUpdateVersion.php"

<?php

    // ================================== CHECK UPDATE VERSION

    function GetUpdateVersion() {
        $Data = $this->FDatabase()->get('tb_version', '*', [
            'ORDER' => [
                'idx' => 'DESC'
            ]
        ]);

        return $Data;
    }
    

?>

I want to separate every category function to each file. So in my model it is easy to read and find the function. Also the model will look more tidy.

Is there anyway to achieve it ? I don't want to put all public function into one file. It is too long to read and when try to use the function I need to search the name.

If I separate it into some of file base on category. Then it is easy to find and structure data may look tidy.

Remember this is codeigniter 4

Dennis Liu
  • 2,268
  • 3
  • 21
  • 43
  • Does this answer your question? [Can I include code into a PHP class?](https://stackoverflow.com/questions/1957732/can-i-include-code-into-a-php-class) – steven7mwesigwa Aug 23 '22 at 05:40
  • 1
    I read the post and found this : No. You cannot include files in the class body. I think that's all. It is not possible. So I have change and create a model file for each category model. Thank You for response. – Dennis Liu Aug 23 '22 at 08:24
  • Using `include` inside OO code should be a red flag. – parttimeturtle Aug 26 '22 at 18:21

0 Answers0