Skip to content
Browse files

updated docs/guide/ja

  • Loading branch information...
1 parent d037fa4 commit fe36409dcf77e47009badcedc0fabbf8106d3ea2 @softark softark committed Jan 31, 2014
View
5 docs/guide/ja/changes.txt
@@ -3,6 +3,11 @@
このページは、各々の Yii リリースにおいて導入された主な新機能をまとめています。
+Version 1.1.15
+--------------
+
+ * [AR に JOIN 後の操作](/doc/guide/database.arr#sec-12) を追加
+
Version 1.1.14
--------------
* [CPasswordHelper] を追加
View
144 docs/guide/ja/database.arr.txt
@@ -262,6 +262,13 @@ $users=User::model()->with(array(
デフォルトでは空です。
このオプションは、バージョン 1.1.3 以降で利用可能です。
+ - `joinOptions`: `USE INDEX` のような `JOIN` 後の操作を設定するためのプロパティです。
+文字列型の値を `HAS_MANY` と `MANY_MANY` のリレーションの `JOIN` のために使うことが出来ます。
+一方、配列型の値は `MANY_MANY` リレーションのためだけに使われることを想定しています。
+配列の最初の要素がジャンクションテーブルの `JOIN` のために使われ、2番目の要素がターゲットテーブルの
+`JOIN` のために使われます。
+このオプションは、バージョン 1.1.15 以降で利用可能です。
+
- `group`: `GROUP BY` 句です。デフォルトは空です。
このオプションで参照されるカラム名は曖昧さを無くさなければなりません。
@@ -351,10 +358,10 @@ $posts=Post::model()->with('comments')->findAll(array(
>
> ~~~
> [php]
-> $comments=Comment::model()->with(
+> $comments=Comment::model()->with(array(
> 'author',
> 'post',
-> 'post.author'=>array('alias'=>'p_author'))->findAll(array(
+> 'post.author'=>array('alias'=>'p_author')))->findAll(array(
> 'order'=>'author.name, p_author.name, post.title'
> ));
> ~~~
@@ -742,3 +749,136 @@ class User extends CActiveRecord
$teacher=User::model()->findByPk(1);
$students=$teacher->students;
~~~
+
+
+JOIN 後の操作
+-------------
+
+バージョン 1.1.15 以降は、JOIN 後の操作を追加して設定することが出来ます。
+`CBaseActiveRelation::$joinOptions` が追加されました。
+下記のようなモデルとリレーションがあるとします。
+
+~~~
+[php]
+class User extends CActiveRecord
+{
+ public function relations()
+ {
+ return array(
+ 'posts' => array(self::HAS_MANY, 'Post', 'user_id'),
+ );
+ }
+}
+
+class Post extends CActiveRecord
+{
+ public function relations()
+ {
+ return array(
+ 'user' => array(self::BELONGS_TO, 'User', 'user_id'),
+ 'tags' => array(self::MANY_MANY, 'Tag', '{{post_tag}}(post_id, tag_id)'),
+ );
+ }
+}
+
+class Tag extends CActiveRecord
+{
+ public function relations()
+ {
+ return array(
+ 'posts' => array(self::MANY_MANY, 'Post', '{{post_tag}}(tag_id, post_id)'),
+ );
+ }
+}
+~~~
+
+`USE INDEX` 句を使ったクエリコードのサンプルを示します。
+
+~~~
+[php]
+$users=User::model()->findAll(array(
+ 'select'=>'t.id,t.name',
+ 'with'=>array(
+ 'posts'=>array(
+ 'alias'=>'p',
+ 'select'=>'p.id,p.title',
+ 'joinOptions'=>'USE INDEX(post__user)',
+ ),
+ ),
+));
+
+$posts=Post::model()->findAll(array(
+ 'select'=>'t.id,t.title',
+ 'with'=>array(
+ 'tags'=>array(
+ 'alias'=>'a',
+ 'select'=>'a.id,a.name',
+ 'joinOptions'=>'USE INDEX(post_tag__tag) USE INDEX(post_tag__post)',
+ ),
+ ),
+));
+
+$posts=Post::model()->findAll(array(
+ 'select'=>'t.id,t.title',
+ 'with'=>array(
+ 'tags'=>array(
+ 'alias'=>'a',
+ 'select'=>'a.id,a.name',
+ 'joinOptions'=>array(
+ 'USE INDEX(post_tag__tag) USE INDEX(post_tag__post)',
+ 'USE INDEX(tag__name)',
+ ),
+ ),
+ ),
+));
+~~~
+
+上記のコードは、それぞれ以下のような MySQL クエリを生成します。
+
+~~~
+[sql]
+SELECT
+ `t`.`id` AS `t0_c0`, `t`.`name` AS `t0_c1`,
+ `p`.`id` AS `t1_c0`, `p`.`title` AS `t1_c2`
+FROM `tbl_user` `t`
+LEFT OUTER JOIN `tbl_post` `p`
+ USE INDEX(post__user) ON (`p`.`user_id`=`t`.`id`);
+
+SELECT
+ `t`.`id` AS `t0_c0`, `t`.`title` AS `t0_c2`,
+ `a`.`id` AS `t1_c0`, `a`.`name` AS `t1_c1`
+FROM `tbl_post` `t`
+LEFT OUTER JOIN `tbl_post_tag` `tags_a`
+ USE INDEX(post_tag__tag) USE INDEX(post_tag__post) ON (`t`.`id`=`tags_a`.`post_id`)
+LEFT OUTER JOIN `tbl_tag` `a` ON (`a`.`id`=`tags_a`.`tag_id`);
+
+SELECT
+ `t`.`id` AS `t0_c0`, `t`.`title` AS `t0_c2`,
+ `a`.`id` AS `t1_c0`, `a`.`name` AS `t1_c1`
+FROM `tbl_post` `t`
+LEFT OUTER JOIN `tbl_post_tag` `tags_a`
+ USE INDEX(post_tag__tag) USE INDEX(post_tag__post) ON (`t`.`id`=`tags_a`.`post_id`)
+LEFT OUTER JOIN `tbl_tag` `a`
+ USE INDEX(tag__name) ON (`a`.`id`=`tags_a`.`tag_id`);
+~~~
+
+クエリオプション `$joinOptions` は、次に示すように、リレーションの宣言の中で設定することも出来ます。
+
+~~~
+[php]
+class Post extends CActiveRecord
+{
+ public function relations()
+ {
+ return array(
+ 'user' => array(self::BELONGS_TO, 'User', 'user_id'),
+ 'tags' => array(self::MANY_MANY, 'Tag', '{{post_tag}}(post_id, tag_id)',
+ 'joinOptions' => array(
+ 'USE INDEX(post_tag__tag) USE INDEX(post_tag__post)',
+ 'USE INDEX(tag__name)',
+ ),
+ ),
+ );
+ }
+}
+~~~
View
4 docs/guide/ja/quickstart.what-is-yii.txt
@@ -18,12 +18,12 @@ Yii は何に向いているか?
---------------------
Yii は、事実上あらゆる種類のウェブアプリケーションの開発に使うことが出来る汎用のウェブプログラミングフレームワークです。
-Yii は、軽量であり、洗練されたキャッシュ機構を持っているため、特に高負荷のアプリケーション、例えばポータルサイト、フォーラム、コンテンツマネジメントシステム(CMS)、イーコマースシステム等のアプリケーションに向きます
+Yii は、軽量であり、洗練されたキャッシュ機構を持っているため、負荷の高いアプリケーション、例えばポータルサイト、フォーラム、コンテンツマネジメントシステム(CMS)、イーコマースシステム等のアプリケーションに特に向いています
Yii は他のフレームワークと比べてどうか?
------------------------------------------
-ほとんどの PHP フレームワークと同様、Yii は MVC フレームワークです。
+ほとんどの PHP フレームワークと同じように、Yii は MVC フレームワークです。
Yii は、他の PHP フレームワークと比べて、高効率、豊富な機能、充実したドキュメントという点で優れています。
Yii は厳しいウェブアプリケーション開発に適合するように、基礎から最上層まで注意深く設計されています。
View
2 docs/guide/ja/test.fixture.txt
@@ -4,7 +4,7 @@
自動化テストは何度も実行される必要があります。
テストのプロセスが繰返し可能であることを保証するために、**フィクスチャ (fixture)** と呼ばれる一定の既知の状態においてテストを走らせることが要求されます。
例えば、ブログアプリケーションで記事作成機能をテストするためには、毎回テストを走らせるたびに、記事に関係するデータを保存するテーブル (`Post` テーブルや `Comment` テーブル) が一定の固定された状態に復元されなければなりません。
-[PHPUnitのドキュメント](http://www.phpunit.de/manual/current/ja/fixtures.html) に、一般的なフィクスチャのセットアップに関するきちんとした説明があります。
+[PHPUnitのドキュメント](http://phpunit.de/manual/3.8/en/fixtures.html) に、一般的なフィクスチャのセットアップに関するきちんとした説明があります。
この章では、主として、先ほど例を挙げて説明したような、データベースのフィクスチャをセットアップする方法について説明します。
データベースのフィクスチャをセットアップすることは、おそらく、データベースをバックエンドに持つウェブアプリケーションのテストにおいて、最も時間を消費する部分の一つでしょう。

0 comments on commit fe36409

Please sign in to comment.
Something went wrong with that request. Please try again.