2012-02-22 5 views
3

私はlithium \ data \ model \ queryで読みましたが、私は結合の例を見ませんでした。リチウムモデルとの結合を実行するにはどうすればよいですか?

+1

あなたはテストケースを見ましたか?たぶん、いくつかあります... – Tomen

+0

@Tomen私は質問を書いたとき、いいえ、提案に感謝します。私はちょうどそれをチェックアウトしましたが、私は本当にテストが何をしているのか分かりません。 foo、bar、bazとは何でしょうか? –

答えて

5

Lithiumを使用して結合を実行する方法は複数あります。あなたは(マニュアルに 例)の関係を定義したところ、リチウムを処理する

  1. はあなたのために参加します。
  2. join()メソッドを使用して既存のQueryオブジェクトに結合を追加できます( API を参照)。
  3. キーjoinsを使用して、Findオブジェクトに配列を渡すことができます。
  4. Connection->read()を使用すると、接続に直接SQLを渡すことができます。

他の方法については十分に文書化されているので、Queryオブジェクトをファインダに渡す例を示します。

$fields = array('id', 'name', 'slug');                                                 
$joins = array(); 
$joins[] = new Query(array(
    'source' => 'client_tests', 
    'constraint' => array('Test.id' => 'client_tests.test_id'), 
)); 
$conditions['client_id'] = $this->data['client_id']; 
$tests = Test::all(array(
    'conditions' => $conditions, 
    'fields' => $fields, 
    'joins' => $joins 
));                                  

sourceは、あなたが参加するテーブルであるとconstraintは結合条件です。リチウムはモデルの名前にテーブルをエイリアスするので、その制約内で使用してください。あなたは、任意の他のパラメータと一緒に任意のファインダーに結合を渡すことができます。

執筆時点では、結合(および関係)はMongoDBのDBRefなどではなく、リレーショナルデータベースでのみ機能することに注意してください。

更新:リンクされたリンクが削除されました。

+0

こんにちは、こんにちは、申し訳ありませんが、私のクエリは、フィールド名に失敗しています。たとえば、slugが両方のテーブルにある場合、大文字のS、小文字のs、小文字のsはtable.slugで指定できますが、大文字のSはtable2のみを表示します。 IE: "SELECT table.slug、table2.slug"の代わりに "SELECT table.slug、table"。私はこれがリチウムが持っている人間の翻訳機能のものと関係があると思いますか? –

+0

これはリチウムバグのように聞こえる。リチウムギブスの問題を確認し、まだ存在しない場合は、問題を開いて失敗したテストケースを添付します。 – michaeltwofish

+0

アイテム#2のAPIリンクは、一部のSEO会社(リンク:実際には両方のリンク)によってリンクが張られています。 – mopsyd

1

(hasOne、hasMany、またはbelongsToを使用して)関係を設定する場合は、findコールのオプションにwithキーを指定して関連データを取得できます。このよう

$categories = Categories::find('all', array(
    'with' => 'Products' 
)); 

チェックアウトの詳細についてmanual chapter on Relationships

+0

関係があなたのために結合を管理するのは本当ですが、任意の結合は不可能であると言うのは誤りです。 – michaeltwofish

+0

クール、私は私の答えからそれを削除しました。 – benzado

+0

ダウン投票も削除されました。 – michaeltwofish

関連する問題