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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
<?php
/**
* ADOdb tests.
*
* This file is part of ADOdb, a Database Abstraction Layer library for PHP.
*
* @package ADOdb
* @link https://adodb.org Project's web site and documentation
* @link https://github.com/ADOdb/ADOdb Source code and issue tracker
*
* The ADOdb Library is dual-licensed, released under both the BSD 3-Clause
* and the GNU Lesser General Public Licence (LGPL) v2.1 or, at your option,
* any later version. This means you can use it in proprietary products.
* See the LICENSE.md file distributed with this source code for details.
* @license BSD-3-Clause
* @license LGPL-2.1-or-later
*
* @copyright 2000-2013 John Lim
* @copyright 2014 Damien Regad, Mark Newnham and the ADOdb community
*/
include_once('../adodb.inc.php');
include_once('../adodb-active-record.inc.php');
// uncomment the following if you want to test exceptions
if (@$_GET['except']) {
include('../adodb-exceptions.inc.php');
}
$db = NewADOConnection('mysql://root@localhost/northwind?persist');
$db->debug=1;
ADOdb_Active_Record::SetDatabaseAdapter($db);
$db->Execute("CREATE TEMPORARY TABLE `persons` (
`id` int(10) unsigned NOT NULL auto_increment,
`name_first` varchar(100) NOT NULL default '',
`name_last` varchar(100) NOT NULL default '',
`favorite_color` varchar(100) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
");
$db->Execute("CREATE TEMPORARY TABLE `children` (
`id` int(10) unsigned NOT NULL auto_increment,
`person_id` int(10) unsigned NOT NULL,
`name_first` varchar(100) NOT NULL default '',
`name_last` varchar(100) NOT NULL default '',
`favorite_pet` varchar(100) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
");
class Person extends ADOdb_Active_Record{ function ret($v) {return $v;} }
$person = new Person();
ADOdb_Active_Record::$_quoteNames = '111';
echo "<p>Output of getAttributeNames: ";
var_dump($person->getAttributeNames());
/**
* Outputs the following:
* array(4) {
* [0]=>
* string(2) "id"
* [1]=>
* string(9) "name_first"
* [2]=>
* string(8) "name_last"
* [3]=>
* string(13) "favorite_color"
* }
*/
$person = new Person();
$person->name_first = 'Andi';
$person->name_last = 'Gutmans';
$person->save(); // this save() will fail on INSERT as favorite_color is a must fill...
$person = new Person();
$person->name_first = 'Andi';
$person->name_last = 'Gutmans';
$person->favorite_color = 'blue';
$person->save(); // this save will perform an INSERT successfully
echo "<p>The Insert ID generated:"; print_r($person->id);
$person->favorite_color = 'red';
$person->save(); // this save() will perform an UPDATE
$person = new Person();
$person->name_first = 'John';
$person->name_last = 'Lim';
$person->favorite_color = 'lavender';
$person->save(); // this save will perform an INSERT successfully
// load record where id=2 into a new ADOdb_Active_Record
$person2 = new Person();
$person2->Load('id=2');
$activeArr = $db->GetActiveRecordsClass($class = "Person",$table = "Persons","id=".$db->Param(0),array(2));
$person2 = $activeArr[0];
echo "<p>Name (should be John): ",$person->name_first, " <br> Class (should be Person): ",get_class($person2),"<br>";
$db->Execute("insert into children (person_id,name_first,name_last) values (2,'Jill','Lim')");
$db->Execute("insert into children (person_id,name_first,name_last) values (2,'Joan','Lim')");
$db->Execute("insert into children (person_id,name_first,name_last) values (2,'JAMIE','Lim')");
$newperson2 = new Person();
$person2->HasMany('children','person_id');
$person2->Load('id=2');
$person2->name_last='green';
$c = $person2->children;
$person2->save();
if (is_array($c) && sizeof($c) == 3 && $c[0]->name_first=='Jill' && $c[1]->name_first=='Joan'
&& $c[2]->name_first == 'JAMIE') echo "OK Loaded HasMany</br>";
else {
var_dump($c);
echo "error loading hasMany should have 3 array elements Jill Joan Jamie<br>";
}
class Child extends ADOdb_Active_Record{};
$ch = new Child('children',array('id'));
$ch->BelongsTo('person','person_id','id');
$ch->Load('id=1');
if ($ch->name_first !== 'Jill') echo "error in Loading Child<br>";
$p = $ch->person;
if ($p->name_first != 'John') echo "Error loading belongsTo<br>";
else echo "OK loading BelongTo<br>";
$p->hasMany('children','person_id');
$p->LoadRelations('children', " Name_first like 'J%' order by id",1,2);
if (sizeof($p->children) == 2 && $p->children[1]->name_first == 'JAMIE') echo "OK LoadRelations<br>";
else echo "error LoadRelations<br>";
$db->Execute("CREATE TEMPORARY TABLE `persons2` (
`id` int(10) unsigned NOT NULL auto_increment,
`name_first` varchar(100) NOT NULL default '',
`name_last` varchar(100) NOT NULL default '',
`favorite_color` varchar(100) default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
");
$p = new adodb_active_record('persons2');
$p->name_first = 'James';
$p->name_last = 'James';
$p->HasMany('children','person_id');
$p->children;
var_dump($p);
$p->Save();
|