Skip to content

Commit

Permalink
Merge pull request yiisoft#3193 from softark/ja-update-2014-02-01
Browse files Browse the repository at this point in the history
updated docs/guide/ja
  • Loading branch information
cebe committed Jan 31, 2014
2 parents d037fa4 + fe36409 commit f4fe5ff
Show file tree
Hide file tree
Showing 4 changed files with 150 additions and 5 deletions.
5 changes: 5 additions & 0 deletions docs/guide/ja/changes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@

このページは、各々の Yii リリースにおいて導入された主な新機能をまとめています。

Version 1.1.15
--------------

* [AR に JOIN 後の操作](/doc/guide/database.arr#sec-12) を追加

Version 1.1.14
--------------
* [CPasswordHelper] を追加
Expand Down
144 changes: 142 additions & 2 deletions docs/guide/ja/database.arr.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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` 句です。デフォルトは空です。
このオプションで参照されるカラム名は曖昧さを無くさなければなりません。

Expand Down Expand Up @@ -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'
> ));
> ~~~
Expand Down Expand Up @@ -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)',
),
),
);
}
}
~~~
4 changes: 2 additions & 2 deletions docs/guide/ja/quickstart.what-is-yii.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,12 @@ Yii は何に向いているか?
---------------------

Yii は、事実上あらゆる種類のウェブアプリケーションの開発に使うことが出来る汎用のウェブプログラミングフレームワークです。
Yii は、軽量であり、洗練されたキャッシュ機構を持っているため、特に高負荷のアプリケーション、例えばポータルサイト、フォーラム、コンテンツマネジメントシステム(CMS)、イーコマースシステム等のアプリケーションに向きます
Yii は、軽量であり、洗練されたキャッシュ機構を持っているため、負荷の高いアプリケーション、例えばポータルサイト、フォーラム、コンテンツマネジメントシステム(CMS)、イーコマースシステム等のアプリケーションに特に向いています

Yii は他のフレームワークと比べてどうか?
------------------------------------------

ほとんどの PHP フレームワークと同様、Yii は MVC フレームワークです。
ほとんどの PHP フレームワークと同じように、Yii は MVC フレームワークです。

Yii は、他の PHP フレームワークと比べて、高効率、豊富な機能、充実したドキュメントという点で優れています。
Yii は厳しいウェブアプリケーション開発に適合するように、基礎から最上層まで注意深く設計されています。
Expand Down
2 changes: 1 addition & 1 deletion docs/guide/ja/test.fixture.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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) に、一般的なフィクスチャのセットアップに関するきちんとした説明があります。
この章では、主として、先ほど例を挙げて説明したような、データベースのフィクスチャをセットアップする方法について説明します。

データベースのフィクスチャをセットアップすることは、おそらく、データベースをバックエンドに持つウェブアプリケーションのテストにおいて、最も時間を消費する部分の一つでしょう。
Expand Down

0 comments on commit f4fe5ff

Please sign in to comment.