Skip to content

Commit

Permalink
use SelectQuery instead of Query, and SelectQuery does not have metho…
Browse files Browse the repository at this point in the history
…d isEmpty

apply PR #7579 to Japanese document.
  • Loading branch information
nmaya committed Oct 23, 2023
1 parent 860343b commit 1463d85
Showing 1 changed file with 19 additions and 23 deletions.
42 changes: 19 additions & 23 deletions ja/orm/retrieving-data-and-resultsets.rst
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,9 @@ find メソッドは、あなたが求めるデータを検索するための簡
// すべての article を検索する
$query = $articles->find('all');

``find()`` メソッドの戻り値は常に :php:class:`Cake\\ORM\\Query` オブジェクトです。
Query クラスにより、それの生成後は、クエリーをより精錬することができるようになります。
Query オブジェクトは怠惰に評価され、行のフェッチ、配列への変換、
``find()`` メソッドの戻り値は常に :php:class:`Cake\\ORM\\SelectQuery` オブジェクトです。
SelectQuery クラスにより、それの生成後は、クエリーをより精錬することができるようになります。
SelectQuery オブジェクトは怠惰に評価され、行のフェッチ、配列への変換、
もしくは ``all()`` メソッドの呼び出しをするまでは実行されません。 ::

// コントローラーやテーブルのメソッド内で
Expand Down Expand Up @@ -349,12 +349,12 @@ finder メソッドは、あなたが作成したい finder の名前が ``Foo``
例えば、公開された記事を見つけるために articles テーブルに finder を追加したい場合、
次のようになります。 ::

use Cake\ORM\Query;
use Cake\ORM\SelectQuery;
use Cake\ORM\Table;

class ArticlesTable extends Table
{
public function findOwnedBy(Query $query, array $options)
public function findOwnedBy(SelectQuery $query, array $options)
{
$user = $options['user'];
return $query->where(['author_id' => $user->id]);
Expand Down Expand Up @@ -537,11 +537,11 @@ contain に条件を渡す

``contain()`` を使う際、関連によって返される列を限定し、条件によってフィルターすることができます。
条件を指定するには、第1引数としてクエリーオブジェクト
``\Cake\ORM\Query`` を受け取る無名関数を渡します。 ::
``\Cake\ORM\SelectQuery`` を受け取る無名関数を渡します。 ::

// コントローラーやテーブルのメソッド内で

$query = $articles->find()->contain('Comments', function (Query $q) {
$query = $articles->find()->contain('Comments', function (SelectQuery $q) {
return $q
->select(['body', 'author_id'])
->where(['Comments.approved' => true]);
Expand All @@ -550,7 +550,7 @@ contain に条件を渡す
これは、またコントローラーレベルでページネーションが働きます。 ::

$this->paginate['contain'] = [
'Comments' => function (Query $query) {
'Comments' => function (SelectQuery $query) {
return $query->select(['body', 'author_id'])
->where(['Comments.approved' => true]);
}
Expand All @@ -566,7 +566,7 @@ contain に条件を渡す

$query = $articles->find()->contain([
'Comments',
'Authors.Profiles' => function (Query $q) {
'Authors.Profiles' => function (SelectQuery $q) {
return $q->where(['Profiles.is_published' => true]);
}
]);
Expand All @@ -578,7 +578,7 @@ contain に条件を渡す
それらを使うことができます。 ::

// すべての article を取り出すが、承認され (approved)、人気のある (popular) ものだけに限定する
$query = $articles->find()->contain('Comments', function (Query $q) {
$query = $articles->find()->contain('Comments', function (SelectQuery $q) {
return $q->find('approved')->find('popular');
});

Expand All @@ -595,7 +595,7 @@ contain に条件を渡す
$query = $articles->find()->contain([
'Authors' => [
'foreignKey' => false,
'queryBuilder' => function (Query $q) {
'queryBuilder' => function (SelectQuery $q) {
return $q->where(...); // フィルターのための完全な条件
}
]
Expand All @@ -616,7 +616,7 @@ contain に条件を渡す
$query->select(['id', 'title'])
->contain(['Comments', 'Tags'])
->enableAutoFields(true)
->contain(['Users' => function(Query $q) {
->contain(['Users' => function(SelectQuery $q) {
return $q->autoFields(true);
}]);

Expand Down Expand Up @@ -964,14 +964,10 @@ ResultSet から任意の場所を指定して取得する
// 5番目のレコードを取得する
$row = $result->skip(4)->first();

Query や ResultSet が空かどうかをチェックする
ResultSet が空かどうかをチェックする
---------------------------------------------

Query や ResultSet オブジェクトの ``isEmpty()`` メソッドを使うことで1行以上あるかどうかを確認できます。
Query オブジェクトで ``isEmpty()`` メソッドを呼び出した場合はクエリーが評価されます。 ::

// クエリーをチェックします
$query->isEmpty();
ResultSet オブジェクトの ``isEmpty()`` メソッドを使うことで1行以上あるかどうかを確認できます。 ::

// 結果をチェックします
$results = $query->all();
Expand Down Expand Up @@ -1003,7 +999,7 @@ Query オブジェクトで ``isEmpty()`` メソッドを呼び出した場合
ときには、より基本的な方法でデータ構造を変更する必要があることもあります。

このような場合に、データベースからフェッチした後で結果を処理する方法として、
``Query`` オブジェクトは ``mapReduce()`` を提供します。
``SelectQuery`` オブジェクトは ``mapReduce()`` を提供します。

データ構造を変更するよくある事例は、結果をとある条件に基いて仕分けするものです。
このために ``mapReduce()`` 関数を使うことができます。
Expand Down Expand Up @@ -1175,17 +1171,17 @@ reducer が呼ばれるごとに、reducer はユーザーごとのフォロワ
これは :ref:`custom-find-methods` セクションで説明しているように、
カスタム Finder メソッドを構築するのに非常に便利です。 ::

public function findPublished(Query $query, array $options)
public function findPublished(SelectQuery $query, array $options)
{
return $query->where(['published' => true]);
}

public function findRecent(Query $query, array $options)
public function findRecent(SelectQuery $query, array $options)
{
return $query->where(['created >=' => new DateTime('1 day ago')]);
}

public function findCommonWords(Query $query, array $options)
public function findCommonWords(SelectQuery $query, array $options)
{
// 前のセクションで説明した共通の単語の件と同じもの
$mapper = ...;
Expand Down Expand Up @@ -1213,7 +1209,7 @@ reducer が呼ばれるごとに、reducer はユーザーごとのフォロワ
stack されたすべての MapReduce 操作を取り除く
---------------------------------------------

ときには ``mapReduce`` 操作をまったく実行させずに ``Query`` オブジェクトを更新したいという
ときには ``mapReduce`` 操作をまったく実行させずに ``SelectQuery`` オブジェクトを更新したいという
状況もあるかもしれません。これは両方の引数に null を指定し、第3引数 (overwrite) で ``true``
を呼び出すことで達成できます。 ::

Expand Down

0 comments on commit 1463d85

Please sign in to comment.