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
|
<com:TContent ID="Main">
<h1>Creating Active Record Classes</h1>
<p>
We need to create two <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.ActiveRecord">Active Record</a> classes, <tt>UserRecord</tt> and <tt>PostRecord</tt>, to represent data records in the <tt>users</tt> and <tt>posts</tt> tables, respectively. Active Record classes must extend from the base class <tt>ActiveRecord</tt>, and their properties must match exactly to the fields of the corresponding tables.
</p>
<p>
To better organize our directories, we create a new directory <tt>protected/database</tt> to hold the class files. We also modify our application configuration by inserting the following lines. It is equivalent to adding the directory <tt>protected/database</tt> to PHP include_path, which allows us to use the classes without explicitly including them.
</p>
<com:TTextHighlighter CssClass="source" Language="xml">
<paths>
<using namespace="Application.database.*" />
</paths>
</com:TTextHighlighter>
<p>
Instead of writing the classes manually, we will use the <a href="http://www.pradosoft.com/demos/quickstart/?page=GettingStarted.CommandLine">PRADO command line tool</a> again to generate the classes for us.
</p>
<p>
Under the <tt>blog</tt> directory, run the following command to enter into the interactive mode of the command line tool:
</p>
<com:TTextHighlighter CssClass="source">
php path/to/prado-cli.php shell .
</com:TTextHighlighter>
<p>
We should see
</p>
<com:TTextHighlighter CssClass="source" Language="text">
Command line tools for Prado 3.1.0.
** Loaded PRADO appplication in directory "protected".
PHP-Shell - Version 0.3.1
(c) 2006, Jan Kneschke <jan@kneschke.de>
>> use '?' to open the inline help
>>
</com:TTextHighlighter>
<p>
At the prompt, enter the following two commands to create <tt>UserRecord</tt> and <tt>PostRecord</tt> classes:
</p>
<com:TTextHighlighter CssClass="source" Language="text">
>> generate users Application.database.UserRecord
>> generate posts Application.database.PostRecord
</com:TTextHighlighter>
<p>
Here we used the <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Components">namespace format</a> again to specify the classes to be created. The path <tt>Application.database.UserRecord</tt> indicates that we want the <tt>UserRecord</tt> class file to be <tt>protected/database/UserRecord.php</tt>.
</p>
<p>
We should see the following directory structure with two new files under <tt>protected/database</tt>:
</p>
<img src="<%~ directories2.gif %>" />
<p>
If we check the <tt>PostRecord</tt> class file, we should see the following content.
</p>
<com:TTextHighlighter CssClass="source" Language="php">
class PostRecord extends TActiveRecord
{
const TABLE='posts';
public $post_id;
public $author;
public $create_time;
public $title;
public $content;
public static function finder($className=__CLASS__)
{
return parent::finder($className);
}
}
</com:TTextHighlighter>
<p>
As we see, for each field in the <tt>posts</tt> table, the class has a corresponding data member. The constant <tt>TABLE</tt> specifies the table name for the <tt>PostRecord</tt>. The static method <tt>finder()</tt> allows us to perform query and retrieve post data in terms of <tt>PostRecord</tt> objects.
</p>
<p>
We can use the command line tool to do some testing with our newly created Active Record classes. Still in the interactive mode of the command line tool, we enter a PHP statement and should see the following. Interested readers may try some other PHP statements, such as <tt>UserRecord::finder()->findAll()</tt>.
</p>
<com:TTextHighlighter CssClass="source" Language="text">
>> PostRecord::finder()->findAll()
array
(
[0] => PostRecord#1
(
[post_id] => '1'
[author] => 'admin'
[create_time] => '1175708482'
[title] => 'first post'
[content] => 'this is my first post'
[TActiveRecord:_readOnly] => false
[TActiveRecord:_connection] => null
[TComponent:_e] => array()
)
)
</com:TTextHighlighter>
</com:TContent>
|