2011-12-05 5 views
1

Kohana ORMを使用してデータベースから情報を取得しようとしています。ORM結合のKohana(KO3)列

 
    id   smallint 
    parent_id smallint 
    name  varchar 
    active  int 

branches_options私はbranches_optionsテーブル

から情報を取得する次のコードで
 
    id   mediumint 
    branche_id smallint 
    name  varchar 
    customer_id int

:2つの関連私のデータベース内のテーブルがあり

 
` $branchesOptions[] = ORM::factory('branches_option') 
     ->where('branche_id', '=', $subBranche) 
     ->join('branches', 'LEFT')->on('branches.id', '=', 'branches_options.branche_id') 
     ->order_by('name') 
     ->find_all() 
     ->as_array();` 

今、私は結果セット内のbranches.nameの値を見たいと思いますが、私はKohanaでこれを行う方法がわかりません。

モデルのコードは次のとおりです。

 
    `class Model_Branche extends ORM 
    { 
     protected $_has_many = array( 
      "options" => array('model' => 'branches_option'), 
      "adwords_templates" => array ('model' => 'adwords_template') 
     ); 

     public $result = array();` 

 
    `class Model_Branches_option extends ORM 
    { 
     protected $_has_many = array ( 
      "keywords" => array('model' => 'branches_options_keyword') 
     ); 

     protected $_has_and_belongs_to = array (
      "adwords_templates" => array (
       "model" => "adwords_template", 
       "through" => "branches_options_templates" 
      ) 
     ); 

     protected $_belongs_to = array ("branche" => array());` 

この行うことができますし、そうであれば、どのように?

class Model_Branche extends ORM 
{ 
    protected $_has_many = array( 
     'options' => array(
      'model' => 'branches_option', 
      'foreign_key' => 'branche_id' 
     ) 
    ); 
} 

そしてBranches_Optionモデルを(それがmodel/branche/フォルダにする必要があります):これは正常に動作するために

+0

モデルのコードを投稿できますか?あなたはそれらの間の関係を適切に定義しましたか? – Thorsten

+0

モデルを追加するために私の質問を編集しました。 – Erik

+0

これらの配列は何ですか? 'array( 'model' => 'branches_options_keyword') );'あなたのコードを適切に投稿してください。 '$ _has_and_belongs_to'とは何ですか? Kohanas ORMにはそのオプションはありません。 – Thorsten

答えて

2

はあなたのモデルにいくつかの重要な変更を加える必要が

class Model_Branches_Option extends ORM 
{ 
    protected $_belongs_to = array(
     'branche' => array() 
    ); 
} 

今することができます次のようなことをしてください:

$options = ORM::factory('branche', $branche_id) 
    ->options 
    ->find_all(); 

foreach ($options as $option) 
{ 
    $branche_active = $option->branche->active; 
    $branche_name = $option->branch->name; 
    $option_name = $option->name; 
} 

ここで最も重要な変更の1つです我々は$_has_manyの関係でforeign_keyオプションを指定しています。 ORMはKohanaのインフレクタヘルパーを使用しているので、それが自動的にそれを認識しない場合があります(単数形で支店ブランチなくBRANCHEです)。

同じ理由で$_table_nameプロパティを指定しても問題が解決しない場合は、このプロパティを指定してみてください。

0

私はここでもコンセプトを把握しようとしています。この点に関してORMのように考えるためには、メインテーブルが関連情報として参照するテーブルから開始する必要があります。

私の世界では、無駄なレポート(モデル/廃棄/レポート)があり、すべてのコード(モデル/廃棄/コード)を持つ別のテーブルがあります。したがって、waste_reportsテーブルにはcodeという列があります。そのフィールドは2Eを持つかもしれません。 2Eは、waste_codes表なしでは何も意味しません。 waste_codesテーブルは(id、code、name)です。私の廃棄物レポートモデルで次に

class Model_Waste_code extends ORM { 

    protected $_primary_key = "code"; 

    protected $_has_one = array(
     'waste_report' => array() 
    ); 
} 

public function action_ormwaste() { 
    $test = ORM::factory('waste_report',76); 
    if ($test->loaded()) 
     echo $test->codes->name; 

    echo "<hr noshade />"; 

    $test = ORM::factory('waste_report')->find_all(); 
    foreach($test as $row) 
     echo $row->codes->name . "<BR>"; 

} 

なり出力:

class Model_Waste_report extends ORM 
{ 
    protected $_belongs_to = array(
     'codes' => array(
      'model' => 'waste_code', 
      'foreign_key' => 'code' 
     ) 
    ); 
} 

が異なる例を示すように

は私のようなこの関係を定義しました
Error with image file (mirrored, etc) 
------------------------------------- 
Wrong Size 
Extra Prints 
Error with image file (mirrored, etc) 
etc... 

要するに、データの結合はその場で処理されます。私はKohana 3.2を使用しています。

ありがとう、それは私をクリアしました。