2
votes

Appel à la méthode non définie CodeIgniter \ Database \ MySQLi \ Builder :: num_rows ()

J'essaye de faire un générateur de code pour ma table

Voici mon modèle:

if ($query->num_rows() <> 0){  

manette :

public function create()
{
    session();
    $data = [
        'main' => 'prosescutting/create',
        'validation' => \Config\Services::validation(),
        'title' => 'Form Tambah Proses Cutting',
        'kodeunik' => $this->pcuttingModel->buat_kode(),
        'kode_packing_list' => $kodePackingSekarang,
    ];
    return view('template/template', $data);
}

et ma table: Table

Ce que j'essaie de faire, c'est de créer un générateur pour kode_packing_list pour chaque élément de nama_barang, donc quand j'entre un autre chemisier Renata, il se remplira automatiquement avec PLIK059000007

Mais quand j'ai essayé de l'exécuter, cela m'a montré ces erreurs:

Erreur Appel à la méthode non définie CodeIgniter \ Database \ MySQLi \ Builder :: num_rows () APPPATH \ Models \ PcuttingModel.php à la ligne 33

et la ligne 33 est

public function buat_kode()   {

    $this->db->table('RIGHT(proses_cutting.kode_packing_list,6) as kode', FALSE);
    $this->builder()->orderBy('kode_packing_list','DESC');    
    $this->builder()->limit(1);    
      $query = $this->db->table('proses_cutting');      //cek dulu apakah ada sudah ada kode di tabel.    
      if ($query->num_rows() <> 0){      
       //jika kode ternyata sudah ada.      
        $data = $query->row();      
        $kode = intval($data->kode) + 1;    
      }
      else {      
       //jika kode belum ada      
        $kode = 1;    
      }

      $kodemax = str_pad($kode, 6, "0", STR_PAD_LEFT); // angka 4 menunjukkan jumlah digit angka 0
      $kodejadi = "PLIK059".$kodemax;    // hasilnya ODJ-9921-0001 dst.
      return $kodejadi;
    }


1 commentaires

Qu'avez-vous essayé de déboguer le problème?


3 Réponses :


1
votes

Vous utilisez les mauvaises fonctions de table de base de données, essayez ceci:

$db = \Config\Database::connect(); // optional; init database if not created yet

$builder = $db->table('proses_cutting');
$builder->select('RIGHT(proses_cutting.kode_packing_list,6) as kode');
$builder->orderBy('kode_packing_list','DESC');
$builder->limit(1);

if($builder->countAllResults() > 0) {
    $query = $builder->get();
    $result = $query->getResult(); // Result as objects eg; $result->kode
    $kode = $result->kode;
}

// Other option: I believe you can do this too

$builder = $db->table('proses_cutting');
$builder->select('RIGHT(proses_cutting.kode_packing_list,6) as kode');
$builder->orderBy('kode_packing_list','DESC');
$builder->limit(1);

$query = $builder->get();
$result = $query->getResult('array');
if(is_array($result) && count($array) > 0) {
    $kode = $result['kode'];
}

Pour plus d'informations sur le générateur, consultez la documentation CI: https://codeigniter4.github.io/userguide/database/query_builder.html


7 commentaires

Cela corrige le problème, mais cela fait une erreur étrange: ErrorException # 64 La déclaration de déclaration d'espace de noms doit être la toute première instruction ou après tout appel de déclaration dans le script APPPATH \ Models \ PcuttingModel.php à la ligne 3


Avez-vous (automatiquement) chargé la bibliothèque de bases de données?


Ouais, il affiche toujours la même erreur malheureusement


Quelle version de CI utilisez-vous?


4, précisément 4.0.4


Ah, je ne sais pas pourquoi ... Je pensais que vous utilisiez CI 3.x. J'ai mis à jour ma réponse.


Cela fonctionne, merci. Donc, pendant tout ce temps, vous avez déjà donné une bonne réponse, juste une mauvaise version. Merci pour l'aide, apprenez-la vraiment.



1
votes

@SukmaQintara Je pense que c'est ce que vous allez faire. Le générateur de requêtes Codeigniter 4 n'a pas vraiment déclaré cette méthode num_row mais nous countResultAll ()

Exemple

      $query = $this->db->table('proses_cutting');      //cek dulu apakah ada sudah ada kode di tabel.    
      if ($query->countResultAll() <> 0){      
       //jika kode ternyata sudah ada.      
        $data = $query->row();      
        $kode = intval($data->kode) + 1;    
      }
      else {      
       //jika kode belum ada      
        $kode = 1;    
      }

Si cela ne fonctionne pas, essayez mon autre réponse Ma dernière réponse OU utilisez le document de référence Vérifiez ce document


2 commentaires

Il corrige le problème de num_row, mais maintenant $ query-> row (); également erreur, que dois-je utiliser pour lire la ligne de ma table


@SukmaQintara Je pense que l'attribution de la requête $ à une variable résoudra le problème. Exemple, $query = $this->db->table('proses_cutting'); pour récupérer des données $data = $query; . Cela devrait être avant la condition if puis utilisez ceci pour récupérer les données $data->get()->getRow(); . Je n'ai pas écrit ceci mais j'espère que cela fonctionnera. Référence codeigniter4.github.io/userguide/database/query_builder.html et codeigniter4.github.io/userguide/database/results.html



-2
votes

pour @SukmaQintara, essayez ce code pour créer un numéro de règle automatique comme la facture dans codeigniter 4, mettez le module et appelez à partir du contrôleur comme votre code.. renommez simplement le nom de la fonction, le nom de la table et le nombre maximal dont vous avez besoin ... mon projet .. si vous obtenez une erreur comme Impossible de connecter la base de données, cela signifie que vous installez codeigniter à partir du compositeur et non du manuel .. corrigez simplement la chose associée avec le pilote MySQLi dans PHP.ini

public function KDaftar()
{

    $db      = \Config\Database::connect();
    $builder = $db->table('users');
    $builder->select("RIGHT(users.nodaftar,6) AS ids", false);
    $query = $builder->get();
    $row = $query->getResultArray();

    if (count($row) > 0) {
        foreach ($row as $key => $row)
        {
            $moduleId = $key;
            $k = ((int)$moduleId) + 1;  
        }  
        } else {
       //jika kode belum ada      
            $k = 1;    
        }
    $kode_max=str_pad($k,6,"0",STR_PAD_LEFT);
    $kode_jadi="PNJ".$kode_max;
    return $kode_jadi;
}


1 commentaires

Veuillez ajouter une explication à votre réponse afin que d'autres puissent en tirer des leçons