Commit a081ae5e by Nobuo Kihara

docs/guide-ja/start-databases.md - revised [ci skip]

parent 3969cdbc
...@@ -2,15 +2,14 @@ ...@@ -2,15 +2,14 @@
================== ==================
この節では、`country` という名前のデータベーステーブルから読み出した国データを表示する新しいページの作り方を説明します。 この節では、`country` という名前のデータベーステーブルから読み出した国データを表示する新しいページの作り方を説明します。
この目的を達するために、データベース接続を構成し、[アクティブレコード](db-active-record.md) クラスを作成し、 この目的を達するために、データベース接続を構成し、[アクティブレコード](db-active-record.md) クラスを作成し、[アクション](structure-controllers.md) を定義し、そして [ビュー](structure-views.md) を作成します。
[アクション](structure-controllers.md) を定義し、そして [ビュー](structure-views.md) を作成します。
このチュートリアルを通じて、次のことをする方法を学びます: このチュートリアルを通じて、次のことを学びます。
* DB 接続を構成する * DB 接続を構成する方法
* アクティブレコードのクラスを定義する * アクティブレコードのクラスを定義する方法
* アクティブレコードのクラスを使ってデータを検索する * アクティブレコードのクラスを使ってデータを検索する方法
* 改ページを伴う方法でビューにデータを表示する * 改ページを伴う仕方でビューにデータを表示する方法
この節を完了するためには、データベースを使うことについて基本的な知識と経験が無ければならないことに注意してください。 この節を完了するためには、データベースを使うことについて基本的な知識と経験が無ければならないことに注意してください。
具体的に言えば、DB クライアントツールを用いてデータベースを作成する方法と、SQL 文を実行する方法を知っていなければなりません。 具体的に言えば、DB クライアントツールを用いてデータベースを作成する方法と、SQL 文を実行する方法を知っていなければなりません。
...@@ -21,12 +20,11 @@ ...@@ -21,12 +20,11 @@
まず初めに、`yii2basic` という名前のデータベースを作成してください。このデータベースからアプリケーションにデータを読み出すことになります。 まず初めに、`yii2basic` という名前のデータベースを作成してください。このデータベースからアプリケーションにデータを読み出すことになります。
作成するデータベースは、SQLite、MySQL、PosttreSQL、MSSQL または Oracle から選んでください。 Yii は多数のデータベース製品に対するサポートを内蔵していますので、作成するデータベースは、SQLite、MySQL、PosttreSQL、MSSQL または Oracle から選ぶことが出来ます。
Yii は多数のデータベース製品に対するサポートを組み込みで持っています。
以下の説明では、話を単純にするために、MySQL を前提とします。 以下の説明では、話を単純にするために、MySQL を前提とします。
次に、データベースに `country` という名前のテーブルを作り、いくつかのサンプルデータを挿入します。 次に、データベースに `country` という名前のテーブルを作り、いくつかのサンプルデータを挿入します。
そうするために、次の SQL 文を実行することが出来ます: そうするためには、次の SQL 文を実行することが出来ます。
```sql ```sql
CREATE TABLE `country` ( CREATE TABLE `country` (
...@@ -47,8 +45,7 @@ INSERT INTO `country` VALUES ('RU','Russia',146934000); ...@@ -47,8 +45,7 @@ INSERT INTO `country` VALUES ('RU','Russia',146934000);
INSERT INTO `country` VALUES ('US','United States',278357000); INSERT INTO `country` VALUES ('US','United States',278357000);
``` ```
この時点で、あなたは `yii2basic` という名前のデータベースを持ち、その中に三つのカラムを持つ `country` というテーブルを持っています。 この時点で、あなたは `yii2basic` という名前のデータベースを持ち、その中に三つのカラムを持つ `country` というテーブルがあり、`country` テーブルは 10 行のデータを持っている、ということになります。
そして、`country` テーブルは、10 行のデータを持っています。
DB 接続を構成する<a name="configuring-db-connection"></a> DB 接続を構成する<a name="configuring-db-connection"></a>
...@@ -58,8 +55,7 @@ DB 接続を構成する<a name="configuring-db-connection"></a> ...@@ -58,8 +55,7 @@ DB 接続を構成する<a name="configuring-db-connection"></a>
(例えば、MySQL のための `pdo_mysql`) の両方をインストール済みであることを確認してください。 (例えば、MySQL のための `pdo_mysql`) の両方をインストール済みであることを確認してください。
アプリケーションがリレーショナルデータベースを使う場合、これは基本的な必要条件です。 アプリケーションがリレーショナルデータベースを使う場合、これは基本的な必要条件です。
これらがインストール済みなら、`config/db.php` というファイルを開いて、あなたのデータベースに適合するように これらがインストール済みなら、`config/db.php` というファイルを開いて、あなたのデータベースに適合するようにパラメータを変更してください。デフォルトでは、このファイルは下記の記述を含んでいます。
パラメータを変更してください。既定値では、このファイルは下記の記述を含んでいます:
```php ```php
<?php <?php
...@@ -73,15 +69,15 @@ return [ ...@@ -73,15 +69,15 @@ return [
]; ];
``` ```
この `config/db.php` というファイルは典型的なファイルベースの [コンフィギュレーション](concept-configurations.md) ツールです。 この `config/db.php` というファイルは典型的なファイルベースの [構成情報](concept-configurations.md)ツールです。
このコンフィギュレーションファイルが [[yii\db\Connection]] インスタンスの作成と初期化に必要なパラメータを規定します。そして、 この構成情報ファイルが [[yii\db\Connection]] インスタンスの作成と初期化に必要なパラメータを規定します。そして、
[[yii\db\Connection]] インスタンスを通じて、背後のデータベースに対して SQL クエリを実行することが出来るようになります。 [[yii\db\Connection]] インスタンスを通じて、背後のデータベースに対する SQL クエリを実行することが出来るようになります。
上記のようにして構成された DB 接続は、アプリケーションコードの中で `Yii::$app->db` という式でアクセスすることが出来ます。 上記のようにして構成された DB 接続は、アプリケーションコードの中で `Yii::$app->db` という式でアクセスすることが出来ます。
> Info|情報: `config/db.php` は、メインのアプリケーションコンフィギュレーションファイルである `config/web.php` にインクルードされます。 > Info|情報: `config/db.php` は、メインのアプリケーション構成情報ファイルである `config/web.php` にインクルードされます。
この `config/web.php`[アプリケーション](structure-applications.md) インスタンスが初期化される仕方を規定します。 この `config/web.php`[アプリケーション](structure-applications.md) インスタンスが初期化される仕方を規定します。
更なる情報については、[コンフィギュレーション](concept-configurations.md) の節を参照してください。 詳しい情報については、[構成情報](concept-configurations.md) の節を参照してください。
アクティブレコードを作成する<a name="creating-active-record"></a> アクティブレコードを作成する<a name="creating-active-record"></a>
...@@ -105,9 +101,9 @@ class Country extends ActiveRecord ...@@ -105,9 +101,9 @@ class Country extends ActiveRecord
`Country` クラスは [[yii\db\ActiveRecord]] を拡張しています。この中には一つもコードを書く必要はありません。 `Country` クラスは [[yii\db\ActiveRecord]] を拡張しています。この中には一つもコードを書く必要はありません。
単に上記のコードだけで、Yii は関連付けられたテーブル名をクラス名から推測します。 単に上記のコードだけで、Yii は関連付けられたテーブル名をクラス名から推測します。
> Info|情報: クラス名とテーブル名を直接に合致させることが出来ない場合は、[[yii\db\ActiveRecord::tableName()]] メソッドをオーバーライドして、関連づけられたテーブル名を明示的に定することが出来ます。 > Info|情報: クラス名とテーブル名を直接に合致させることが出来ない場合は、[[yii\db\ActiveRecord::tableName()]] メソッドをオーバーライドして、関連づけられたテーブル名を明示的に定することが出来ます。
`Country` クラスを使うことによって、以下のコード断片で示すように、`country` テーブルの中のデータを簡単に操作することが出来ます: `Country` クラスを使うことによって、以下のコード断片で示すように、`country` テーブルの中のデータを簡単に操作することが出来ます
```php ```php
use app\models\Country; use app\models\Country;
...@@ -127,18 +123,16 @@ $country->save(); ...@@ -127,18 +123,16 @@ $country->save();
``` ```
> Info|情報: アクティブレコードは、オブジェクト指向の流儀でデータベースのデータにアクセスし、操作する強力な方法です。 > Info|情報: アクティブレコードは、オブジェクト指向の流儀でデータベースのデータにアクセスし、操作する強力な方法です。
[アクティブレコード](db-active-record.md) の節で、更に詳細な情報を得ることが出来ます。 [アクティブレコード](db-active-record.md) の節で、詳細な情報を得ることが出来ます。
もう一つの方法として、[データアクセスオブジェクト(DAO)](db-dao.md) と呼ばれる、より低レベルなデータアクセス方法を使って もう一つの方法として、[データアクセスオブジェクト](db-dao.md) と呼ばれる、より低レベルなデータアクセス方法を使ってデータベースを操作することも出来ます。
データベースを操作することも出来ます。
アクションを作成する<a name="creating-action"></a> アクションを作成する<a name="creating-action"></a>
-------------------- --------------------
国データをエンドユーザに見えるようにするために、新しいアクションを作成する必要があります。 国データをエンドユーザに見えるようにするために、新しいアクションを作成する必要があります。
これまでの節でしたように `site` コントローラの中に新しいアクションを置くのではなく、国データに関係する全てのアクションに これまでの節でしたように `site` コントローラの中に新しいアクションを置くのではなく、国データに関係する全てのアクションに限定した新しいコントローラを作成する方が理にかなうでしょう。
限定した新しいコントローラを作成する方が理にかなうでしょう。この新しいコントローラを `CountryController` と名付けます。 この新しいコントローラを `CountryController` と名付けます。そして、下記に示すように、`index` アクションをその中に作成します。
そして、下記に示すように、`index` アクションをその中に作成します。
```php ```php
...@@ -179,9 +173,9 @@ class CountryController extends Controller ...@@ -179,9 +173,9 @@ class CountryController extends Controller
`index` アクションは `Country::find()` を呼び出します。 `index` アクションは `Country::find()` を呼び出します。
このアクティブレコードのメソッドは DB クエリを構築して、`country` テーブルから全てのデータを読み出します。 このアクティブレコードのメソッドは DB クエリを構築して、`country` テーブルから全てのデータを読み出します。
一回のリクエストで返される国の数を制限するために、クエリは [[yii\data\Pagination]] オブジェクトの助けを借りてページ付けされます。 一回のリクエストで返される国の数を制限するために、クエリは [[yii\data\Pagination]] オブジェクトの助けを借りてページ付けされます。
`Pagination` オブジェクトは二つの目的に奉仕します: `Pagination` オブジェクトは二つの目的に奉仕します
* クエリによって表現される SQL 文に `offset` 句と `limit` 句をセットして、一度に一ページ分のデータだけ (1ページ最大5行)を返すようにします。 * クエリによって表現される SQL 文に `offset` 句と `limit` 句をセットして、一度に一ページ分のデータだけ (1ページ最大5行) を返すようにします。
* 次の項で説明されるように、一連のページボタンからなるページャをビューに表示するために使われます。 * 次の項で説明されるように、一連のページボタンからなるページャをビューに表示するために使われます。
コードの最後で、`index` アクションは `index` と言う名前のビューをレンダリングしていますが、このとき、国データはもちろん、そのページ付け情報もビューに渡されます。 コードの最後で、`index` アクションは `index` と言う名前のビューをレンダリングしていますが、このとき、国データはもちろん、そのページ付け情報もビューに渡されます。
...@@ -192,7 +186,7 @@ class CountryController extends Controller ...@@ -192,7 +186,7 @@ class CountryController extends Controller
最初に、`views` ディレクトリの下に `country` という名前のサブディレクトリを作ってください。 最初に、`views` ディレクトリの下に `country` という名前のサブディレクトリを作ってください。
このフォルダが `country` コントローラによって表示される全てのビューを保持するのに使われます。 このフォルダが `country` コントローラによって表示される全てのビューを保持するのに使われます。
`views/country` ディレクトリの中に、下記のコードを含む `index.php` という名前のファイルを作成します: `views/country` ディレクトリの中に、下記のコードを含む `index.php` という名前のファイルを作成します
```php ```php
<?php <?php
...@@ -214,15 +208,14 @@ use yii\widgets\LinkPager; ...@@ -214,15 +208,14 @@ use yii\widgets\LinkPager;
ビューは国データの表示に関連して二つの部分に分けられます。 ビューは国データの表示に関連して二つの部分に分けられます。
最初の部分では、提供された国データがたどられて、HTML の順序無しリストとしてレンダリングされます。 最初の部分では、提供された国データがたどられて、HTML の順序無しリストとしてレンダリングされます。
第二の部分では、アクションから渡されたページ付け情報を使って、[[yii\widgets\LinkPager]] 第二の部分では、アクションから渡されたページ付け情報を使って、[[yii\widgets\LinkPager]] ウィジェットがレンダリングされます。
ウィジェットがレンダリングされます。
`LinkPager` ウィジェットはページボタンのリストを表示します。ボタンのどれかをクリックすると、対応するページの国データが更新表示されます。 `LinkPager` ウィジェットはページボタンのリストを表示します。ボタンのどれかをクリックすると、対応するページの国データが更新表示されます。
試してみる<a name="trying-it-out"></a> 試してみる<a name="trying-it-out"></a>
---------- ----------
上記のコード全てがどのように動作するかを見るために、ブラウザで下記の URL をアクセスします: 上記のコード全てがどのように動作するかを見るために、ブラウザで下記の URL をアクセスします
``` ```
http://hostname/index.php?r=country/index http://hostname/index.php?r=country/index
...@@ -232,8 +225,8 @@ http://hostname/index.php?r=country/index ...@@ -232,8 +225,8 @@ http://hostname/index.php?r=country/index
最初、ページは5つの国を表示しています。 最初、ページは5つの国を表示しています。
そして、国リストの下には、4つのボタンを持ったページャがあります。 そして、国リストの下には、4つのボタンを持ったページャがあります。
"2" のボタンをクリックすると、ページはデータベースから次の5つの国、すなわち、2ページ目のレコードを表示します。 "2" のボタンをクリックすると、ページはデータベースにある次の5つの国、すなわち、2ページ目のレコードを表示します。
より注意深く観察すると、ブラウザの URL も次のように変ったことに気付くでしょう: 注意深く観察すると、ブラウザの URL も次のように変ったことに気付くでしょう。
``` ```
http://hostname/index.php?r=country/index&page=2 http://hostname/index.php?r=country/index&page=2
...@@ -241,8 +234,8 @@ http://hostname/index.php?r=country/index&page=2 ...@@ -241,8 +234,8 @@ http://hostname/index.php?r=country/index&page=2
舞台裏では、[[yii\data\Pagination|Pagination]] が、データセットをページ付けするのに必要な全ての機能を提供しています。 舞台裏では、[[yii\data\Pagination|Pagination]] が、データセットをページ付けするのに必要な全ての機能を提供しています。
* 最初[[yii\data\Pagination|Pagination]] は、1ページ目を表しています。 * 初期状態では[[yii\data\Pagination|Pagination]] は、1ページ目を表しています。
これは、国の SELECT クエリが `LIMIT 5 OFFSET 0` という句を伴うことを示しています。 これを反映して、国の SELECT クエリは `LIMIT 5 OFFSET 0` という句を伴うことになります。
その結果、最初の5つの国が取得されて表示されます。 その結果、最初の5つの国が取得されて表示されます。
* [[yii\widgets\LinkPager|LinkPager]] ウィジェットは、[[yii\data\Pagination::createUrl()|Pagination]] によって作成された URL を使ってページボタンをレンダリングします。 * [[yii\widgets\LinkPager|LinkPager]] ウィジェットは、[[yii\data\Pagination::createUrl()|Pagination]] によって作成された URL を使ってページボタンをレンダリングします。
URL は、別々のページ番号を表現する `page` というクエリパラメータを含んだものになります。 URL は、別々のページ番号を表現する `page` というクエリパラメータを含んだものになります。
...@@ -259,4 +252,4 @@ http://hostname/index.php?r=country/index&page=2 ...@@ -259,4 +252,4 @@ http://hostname/index.php?r=country/index&page=2
次の節では、[Gii](tool-gii.md) と呼ばれる強力なコード生成ツールを使う方法を学びます。 次の節では、[Gii](tool-gii.md) と呼ばれる強力なコード生成ツールを使う方法を学びます。
このツールは、データベーステーブルのデータを取り扱うための「作成・読出し・更新・削除 (CRUD)」操作のような、通常必要とされることが多いいくつかの機能の迅速な実装を手助けしてくれるものです。 このツールは、データベーステーブルのデータを取り扱うための「作成・読出し・更新・削除 (CRUD)」操作のような、通常必要とされることが多いいくつかの機能の迅速な実装を手助けしてくれるものです。
実際のところ、あなたがたった今書いたばかりのコードは、Gii ツールを使って Yii によって自動的に生成することが出来ます。 実際のところ、あなたがたった今書いたばかりのコードは、Gii ツールを使えば、全部、Yii が自動的に生成してくれるものです。
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment