CI double DB
Ik wil een extra database gebruiken op basis van de user die ingelogd is. In de tabel users staat welke DB user en PWD ik moet gebruiken (niet geheel save misschien, maar goed).
Models extenden nu een core Model welke CI_Model weer extend.
Op zich gaat dat allemaal goed, maar doe ik nu vanuit een model een query, dan krijg ik een foutmelding:
Quote:
Fatal error: Call to a member function select() on a non-object in /home/jdcrm/domains/jdcrm.nl/public_html/application/models/financial_model.php on line 15
Overigens, vrij veel code, vooral omdat ik denk dat het "relevant" is.
Mijn 'core' model:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php
class JD_Model extends CI_Model
{
function __construct()
{
parent::__construct();
/*
* Get USER Database information
*/
$config['hostname'] = "localhost";
$config['username'] = $this->getUDbUser(JD_Controller::userId());
$config['password'] = $this->getUDbPwd(JD_Controller::userId());
$config['database'] = $this->getUDbUser(JD_Controller::userId());
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$config['cache_on'] = FALSE;
$config['cachedir'] = "";
$config['char_set'] = "utf8";
$config['dbcollat'] = "utf8_general_ci";
$this->uDb = $this->load->database($config);
}
function getUDbUser($user_id)
{
$this->db->select('u_db_user');
$this->db->where('u_id',$user_id);
$q = $this->db->get('users');
if($q->num_rows() == 1){
$result = $q->result_object();
return $result[0]->u_db_user;
}
}
function getUDbPwd($user_id)
{
$this->db->select('u_db_pwd');
$this->db->where('u_id',$user_id);
$q = $this->db->get('users');
if($q->num_rows() == 1){
$result = $q->result_object();
return $result[0]->u_db_pwd;
}
}
}
?>
class JD_Model extends CI_Model
{
function __construct()
{
parent::__construct();
/*
* Get USER Database information
*/
$config['hostname'] = "localhost";
$config['username'] = $this->getUDbUser(JD_Controller::userId());
$config['password'] = $this->getUDbPwd(JD_Controller::userId());
$config['database'] = $this->getUDbUser(JD_Controller::userId());
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$config['cache_on'] = FALSE;
$config['cachedir'] = "";
$config['char_set'] = "utf8";
$config['dbcollat'] = "utf8_general_ci";
$this->uDb = $this->load->database($config);
}
function getUDbUser($user_id)
{
$this->db->select('u_db_user');
$this->db->where('u_id',$user_id);
$q = $this->db->get('users');
if($q->num_rows() == 1){
$result = $q->result_object();
return $result[0]->u_db_user;
}
}
function getUDbPwd($user_id)
{
$this->db->select('u_db_pwd');
$this->db->where('u_id',$user_id);
$q = $this->db->get('users');
if($q->num_rows() == 1){
$result = $q->result_object();
return $result[0]->u_db_pwd;
}
}
}
?>
Extended model die dan vervolgens de foutmelding maakt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
class financial_model extends JD_Model
{
function getInvoices($limit = null, $offset = null, $selectExtended = FALSE)
{
//LINE 15:
$this->uDb->select('fin_invoices.*');
$this->uDb->select('rel_creditor.r_name');
$this->uDb->join('rel_creditor', 'fin_invoices.f_inv_cId = rel_creditor.r_id');
$this->uDb->limit($limit, $offset);
$q = $this->uDb->get('fin_invoices');
return $q->result_object();
}
?>
class financial_model extends JD_Model
{
function getInvoices($limit = null, $offset = null, $selectExtended = FALSE)
{
//LINE 15:
$this->uDb->select('fin_invoices.*');
$this->uDb->select('rel_creditor.r_name');
$this->uDb->join('rel_creditor', 'fin_invoices.f_inv_cId = rel_creditor.r_id');
$this->uDb->limit($limit, $offset);
$q = $this->uDb->get('fin_invoices');
return $q->result_object();
}
?>
Iemand die mij verder kan helpen?
Gewijzigd op 24/06/2013 13:37:54 door John Cena
Nergens gedeclareerd, nergens geïnitialiseerd.
Toch niet in de code die je gepost hebt.
En het is ook wat de error report zegt.
Gewijzigd op 24/06/2013 13:34:11 door Kris Peeters
$this->db wordt door standaard CI model geinstantieerd, dus die zal geen problemen op kunnen leveren. Dat weet ik zeker, want ik kan wel gewoon inloggen namelijk.
"Op het moment dat je $this->db->select() uitvoert, is $this->db geen object."
Ik kan niet zien wat je niet post. Ik merk gewoon op dat ik precies het zelfde zie als de error reporting zegt.
Toon eens waar je $this->db declareert en hoe die een waarde krijgt.
(Toon ook in welke class dat gebeurt)
-------
EDIT.
Okay, kijk. In de tweede lijn van de constructor gebruik je de methode $this->getUDbUser() al.
Op dat moment is er van ->db nog geen sprake, voor zover ik kan zien.
Dat moet dus gebeuren in de parent constructor, veronderstel ik.
Vooraleer je ->getUDbUser() kan gebruiken, moet ->db al geïnitialiseerd zijn.
Gewijzigd op 24/06/2013 13:53:09 door Kris Peeters
>db wordt door CI geiniteerd (zoals aangegeven). Dat kun je ook zien op line 14 in mijn Core model, die functies geven geen foutmelding.
Pas in het financial model gaat het fout wanneer ik $this->uDb aanroep.
Maar verder is het (ongeveer) het zelfde verhaal.
Waar komt ->uDb van (declaratie, initiatie, ...) ?