1

今日試してみる前にORMを使ったことがなかったので、解決方法がわからないという最初の問題に遭遇しました(ORMが実際にどのように機能するかを理解していないため)。

言語、コード、ピボットテーブルCodes_Languagesの3つのテーブルがあるとします。これらはすべて、モデル内で適切に定義された関係を持っています。

さて、言語のすべての名前をエコーするために、私は次のように行くことができます:

$languages = ORM::factory('languages')->find_all();
foreach ($languages as $language)
{
  echo $language->name, '<br />';
}

特定の言語内のコードのすべての名前をエコーし​​たい場合は、次のようになります。

$language = ORM::factory('languages', 1);
foreach ($language->codes as $code)
{
  echo $code->title, ' ', $code->description;
}

しかし、これを行う必要がある場合はどうでしょうか。各言語で最新の5つのコード(code.time_postedでDESCによって順序付けられている)を取得しますか?

$languages = ORM::factory('languages')->find_all();
???$languages->codes = ORM->order_by('time_posted', 'desc')->limit(5);???
foreach ($languages as $language)
{
  echo $language->name, '<br />';
  foreach ($language->codes as $code)
  {
    echo $code->name, ' ', $code->description;
  }
}

疑似コードの周りに疑問符を付けました。これは、私がやろうとしていることを説明していると思います。コハナはもう少しよく考えられていると思うので、最近CodeIngiterから変換しましたが、ドキュメントが不足しているようで、必要なことを行う方法を見つけることができませんでした。

どんなガイダンスも素晴らしいでしょう。ありがとう。

4

3 に答える 3

1

免責事項:KohanaのORMを使用したことはありませんが、ドキュメントを読むと、次のようなものが必要なようです:

ORM::factory('languages')->orderby('time_posted', 'DESC')->find_all(5);

などのほぼすべての Kohana のクエリ ビルダー メソッドを ORM オブジェクトで使用して、より複雑なクエリを実行できます。orderbyjoin

(PHP の ORM に関する限り、Doctrineはほぼ同じくらい優れています。Kohana やその他のフレームワークとうまく統合できるはずです。)

于 2009-09-03T08:00:43.313 に答える
0

Kohana の ORM は、次の条件に従う場合にのみ機能します。

  1. テーブル名は複数形にする必要があります (既に行った「言語」のように)。
  2. テーブルには自動インクリメント付きの ID が必要です (必須)。
  3. 次のように、ORM クラス (これは複数形ではない「言語」) を拡張するモデルを作成する必要があります。

    クラス Language_Model は ORM { } を拡張します

kohana のドキュメントに従って、後でいくつかの追加パラメーターを上記のクラスに投稿できます。

于 2009-09-05T04:11:44.253 に答える
0

これを試して:

$languages = ORM::factory('languages')->find_all();

foreach ($languages as $language)
{
  echo $language->name, '<br />';
  foreach ($language->order_by('time_posted', 'desc')->limit(5)->codes as $code)
  {
    echo $code->name, ' ', $code->description;
  }
}

テストはしていませんが、うまくいくはずです。ここ数週間、Kohana の ORM を使用しています。

于 2009-09-08T17:23:24.940 に答える