Changeset 4533

Show
Ignore:
Timestamp:
06/21/08 13:43:54 (13 months ago)
Author:
moksahero
Message:

did some translations in getting started

Location:
branches/0.11/manual/docs/ja
Files:
6 added
1 modified

Legend:

Unmodified
Added
Removed
  • branches/0.11/manual/docs/ja/getting-started.txt

    r4531 r4533  
    1 ++  
    2 DoctrineはPHPの5.2以降を要求します。外部のライブラリは要求されません。データベースの関数コールの抽象化のためにDoctrineはデフォルトでPHPにバンドルされているPDOを使用します 
     1++ 動作条 
     2Doctrineを動作させるにはPHPの5.2.3以降が必要です。外部のライブラリは必要ありません。データベースの関数コールの抽象化のためにDoctrineはデフォルトでwww.php.netにある正式版にPHPにバンドルされているPDOを使用します。Windows用のUniform Serverなど正式版でないパッケージからPHPをインストールした場合、追加の設定を行う必要があるかもしれません 
    33 
    4 ++ インストレーション 
    5 Doctrineの導入はとても簡単です。http://doctrine.pengus.net/svn/trunk から最新のDoctrineのリビジョンを入手するだけです。 
    6  
    7 DoctrineをダウンロードするためにSVN (Subversion)クライアントが必要です。 
    8  
    9 現在のディレクトリでDoctrineをチェックアウトするために**svn**コマンドラインは次のコードを使用します:  
    10  
    11 <code type="bash"> 
    12 svn co http://doctrine.pengus.net/svn/trunk .  
    13 </code> 
    14  
    15 SVNクライアントがない場合、下記のリストから一つ選んで下さい。**チェックアウト**、**パス**、**リポジトリURL**オプションを見つけて http://doctrine.pengus.net/svn/trunk を入力して下さい。Doctrineをチェックアウトするためにユーザー名もしくはパスワードは必要ありません。 
    16  
    17 * [http://tortoisesvn.tigris.org/ TortoiseSVN]はWindows Explorerに統合されるWindowsアプリケーションです 
    18 * [http://www.apple.com/downloads/macosx/development_tools/svnx.html svnx]はMac OS X GUI svnアプリケーションです  
    19 * Eclipseは[http://subclipse.tigris.org/ subeclipse]プラグインを通してSVNと統合します 
    20  
    21 ++ 新しいプロジェクトを始める 
    22 Doctrine_RecordはすべてのDoctrineベースプロジェクトの基本コンポーネントです。少なくともそれぞれのデータベーステーブルに対してDoctrine_Recordが一つあります。Doctrine_Record follows the [http://www.martinfowler.com/eaaCatalog/activeRecord.html Active Record pattern] 
    23  
    24 Doctrineは常に主キーを持たないテーブルに対して'id'という名前の主キーを追加します。データベースのテーブルを作成するために必要な唯一のことはDoctrine_Recordを拡張するクラスを定義しhasColumn()メソッドコールを持ちこれらのクラスをエクスポートすることでsetTableDefinitionメソッドを設定することです。 
    25  
    26 'user'というデータベーステーブルを作成することを考えてみます。カラムはid(primary key)、name、username、passwordとcreatedです。Doctrineが既にインストールされているとして必要なものは下記の数行です: 
    27  
    28 User.php : 
    29 <code type="php"> 
    30 class User extends Doctrine_Record  
    31 { 
    32     public function setTableDefinition()  
    33     { 
    34         // 'user'テーブルカラムを設定する 
    35         // idカラムはオートインクリメントで主キーは指定されていないことに注意 
    36          
    37         $this->hasColumn('name', 'string',30); 
    38         $this->hasColumn('username', 'string',20); 
    39         $this->hasColumn('password', 'string',16); 
    40         $this->hasColumn('created', 'integer',11); 
    41     } 
    42 } 
    43 </code> 
    44  
    45 ユーザークラスをデータベースにエクスポートするために次のシンプルなビルドスクリプトが必要です: 
    46  
    47 <code type="php"> 
    48 //ベースのDoctrineクラスをrequireする 
    49 require_once('lib/Doctrine.php'); 
    50  
    51 //autoloaderを登録する 
    52 spl_autoload_register(array('Doctrine', 'autoload')); 
    53  
    54 require_once('User.php'); 
    55  
    56 //接続をセットアップする 
    57 Doctrine_Manager::connection('mysql://user:pass@localhost/test'); 
    58  
    59 //クラスをエクスポートする 
    60 Doctrine::createTablesFromArray(array('User')); 
    61 </code> 
    62 これで基本的なCRUOオペレーションをサポートするユーザーモデルができました! 
    63  
    64  
    65 ++ 既存のデータベースと連携する 
    66 +++ 導入 
    67  
    68 DoctrineのようなORMツールを探すときに共通の事例はデータベースとコードが肥大/複雑になることです。SQLコードを操作するためによりしっかりしたツールが必要とされます。  
    69  
    70 Doctrineは既存のデータベースからDoctrine_Recordクラスの生成をサポートします。ドメインモデルに対してすべてのDoctrine_Recordクラスを手動で書く必要はありません。  
    71  
    72 +++ 最初のインポートを作成する 
    73  
    74 'file'という名前の一つのテーブルを持つtestというMySQLのデータベースを考えてみましょう。 
    75  
    76 fileテーブルは次のSQL命令文で作成されました: 
    77  
    78 <code type="sql"> 
    79 CREATE TABLE file ( 
    80     id INT UNSIGNED AUTO_INCREMENT NOT NULL, 
    81     name VARCHAR(150), 
    82     size BIGINT, 
    83     modified BIGINT, 
    84     type VARCHAR(10), 
    85     content TEXT, 
    86     path TEXT, 
    87     PRIMARY KEY(id)) 
    88 </code> 
    89  
    90 これをDoctrine_Recordクラスに変換することを考えます。これは次のコードスニペットで簡単に達成できます: 
    91  
    92 <code type="php"> 
    93 require_once('lib/Doctrine.php'); 
    94  
    95 spl_autoload_register(array('Doctrine', 'autoload')); 
    96 Doctrine_Manager::connection('mysql://root:dc34@localhost/test'); 
    97  
    98 // インポートメソッドは一つのパラメータを取ります: importディレクトリ 
    99 // (生成されたレコードファイルが設置されるディレクトリ) 
    100 Doctrine::generateModelsFromDb('myrecords'); 
    101 </code> 
    102  
    103 お終いです!myrecordsディレクトリでFile.phpという名前のファイルが存在します。ファイルは次の通りです: 
    104  
    105 <code type="php"> 
    106 /** 
    107  * This class has been auto-generated by the Doctrine ORM Framework 
    108  * Created: Saturday 10th of February 2007 01:03:15 PM 
    109  */ 
    110 class File extends Doctrine_Record 
    111 { 
    112     public function setTableDefinition() 
    113     { 
    114         $this->hasColumn('id', 'integer', 4, array('notnull' => true, 
    115                                                    'primary' => true, 
    116                                                    'unsigned' => true, 
    117                                                    'autoincrement' => true)); 
    118         $this->hasColumn('name', 'string', 150); 
    119         $this->hasColumn('size', 'integer', 8); 
    120         $this->hasColumn('modified', 'integer', 8); 
    121         $this->hasColumn('type', 'string', 10); 
    122         $this->hasColumn('content', 'string', null); 
    123         $this->hasColumn('path', 'string', null); 
    124     } 
    125     public function setUp() 
    126     { 
    127  
    128     } 
    129 } 
    130 </code> 
    131  
    132 +++ インポートオプション 
    133  
    134  
    135 ++ クラスをエクスポートする 
    136 +++ 導入 
    137  
    138 Doctrineはレコードクラスをデータベースにエクスポートすることをサポートします。レコード定義に与えられた定義に基づいてDoctrineはデータベーススキーマを変更します。 
    139  
    140 次の定義を持つUserとPhonenumberという名前のクラスを考えます: 
    141  
    142 <code type="php"> 
    143 // User.phpファイル 
    144 class User extends Doctrine_Record 
    145 { 
    146     public function setTableDefinition() 
    147     { 
    148         $this->hasColumn('name', 'string', 20); 
    149     } 
    150     public function setUp() 
    151     { 
    152         $this->hasMany('Phonenumber', array('local' => 'id', 
    153                                             'foreign' => 'user_id')); 
    154     } 
    155 } 
    156 // Phonenumber.phpファイル 
    157 class Phonenumber extends Doctrine_Record 
    158 { 
    159     public function setTableDefinition() 
    160     { 
    161         $this->hasColumn('phonenumber', 'string', 20); 
    162         $this->hasColumn('user_id', 'integer'); 
    163     } 
    164     public function setUp() 
    165     { 
    166         $this->hasOne('User', array('local' => 'user_id', 
    167                                     'foreign' => 'id', 
    168                                     'onDelete' => 'CASCADE')); 
    169     } 
    170 } 
    171 </code> 
    172  
    173 これらのクラスは'models/'ディレクトリにあります。このディレクトリをイテレートしてこれらのクラスを以下のスクリプトを持ったデータベース構造に追加します: 
    174  
    175 <code type="php"> 
    176  
    177 require_once('path-to-doctrine/lib/Doctrine.php'); 
    178  
    179 spl_autoload_register(array('Doctrine', 'autoload')); 
    180  
    181 //エクスポートするためにデータベース接続が必要である 
    182 Doctrine_Manager::connection('mysql://user:pass@localhost/test'); 
    183  
    184 Doctrine::createTablesFromModels('models'); 
    185 </code> 
    186  
    187 これはMySQL上で次のクエリーを実行します。 
    188  
    189 <code type="sql"> 
    190 CREATE TABLE user (id BIGINT AUTO_INCREMENT, name VARCHAR(20), PRIMARY KEY(id), INDEX(id)); 
    191 CREATE TABLE phonenumber (id INT AUTO_INCREMENT, phonenumber VARCHAR(20), user_id BIGINT, PRIMARY KEY(id), INDEX(user_id)); 
    192 ALTER TABLE phonenumber ADD CONSTRAINT FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE; 
    193 </code> 
    194  
    195 次のことに注意を払います: 
    196  
    197 # 主キーカラムを指定していないのでオートインクリメントの主キーが自動追加されます 
    198 # Doctrineはインデックスを参照された関連カラムに自動追加します(これはMySQLに必要です) 
    199  
    200 +++ エクスポートクエリーを手に入れる 
    201  
    202 エクスポートクエリーをすぐに実行を行いたくなくむしろクエリーの文字列を入手してそれらをbuild.sqlファイルに添付したい状況があるとします。これは次のように達成できます: 
    203  
    204 <code type="php"> 
    205 require_once('path-to-doctrine/lib/Doctrine.php'); 
    206  
    207 spl_autoload_register(array('Doctrine', 'autoload')); 
    208  
    209 Doctrine_Manager::connection('mgsql://user:pass@localhost/test'); 
    210  
    211 $queries = Doctrine::generateSqlFromModels('models'); 
    212  
    213 echo $queries; 
    214 </code> 
    215  
    216 同じ状況を考えてエクスポートを実行するために必要なSQLクエリーの文字を取得したいことを考えます。Doctrine::generateSqlFromModels()で実現されました。 
    217  
    218 +++ エクスポートオプション 
    219  
    220 <code type="php"> 
    221 // テーブル定義と制約などのすべてをエクスポートする 
    222 $manager = Doctrine_Manager::getInstance(); 
    223  
    224 $manager->setAttribute(Doctrine::ATTR_EXPORT, Doctrine::EXPORT_ALL); 
    225  
    226 // 制約無しでクラスをエクスポートする 
    227  
    228 $manager->setAttribute(Doctrine::ATTR_EXPORT, Doctrine::EXPORT_TABLES ^  
    229                                               Doctrine::EXPORT_CONSTRAINTS); 
    230  
    231 // エクスポーティングをオフにする 
    232  
    233 $manager->setAttribute(Doctrine::ATTR_EXPORT, Doctrine::EXPORT_NONE); 
    234  
    235 $sql = Doctrine::generateSqlFromModels(); 
    236 </code> 
     4++ Installation 
     5++ Starting new project 
     6++ Working with existing databases 
     7++ Creating tables 
     8++ Generating models 
     9++ Auto loading models 
     10++ Command line interface 
     11++ My first project tutorial