2010-12-08 13 views
0

2つのテーブル(2つの異なるデータベースに存在する)があります。 「クライアント」と「ドメイン」では、クライアントは複数のドメインを持つことができます。2つのテーブルの結果を検索する際のフィールド名の選択

これは私が使用していたコードです:

$this->Domain->find('all', array(
    'order' => 'domain ASC', 
    'fields' => array(
     'Domain.id', 
     'Domain.domain', 
     'Server.name', 
     'Client.id', 
     'Client.name' 
    ) 
)); 

i「はフィールド」=>配列()すべてが、すぐに私は特定のフィールドを求めるように、正常に動作し使用しないことで、すべてのフィールドを返す場合には、それは言う:私はちょうど(クライアントモデルは、別のデータベース上にある唯一のモデルである2つのクライアントの列を削除する場合も、正常に動作します

SQL Error: 1054: Unknown column 'Client.id' in 'field list'

すべてを

答えて

0

クライアント場合。したがって、$this->Domain->find('all');フィールドを明示的に渡すようにモデルを呼び出す必要があります。Client.idは、ドメインテーブルの一部ではなくエラーを表示し、debug=2を使用してSQLダンプを有効にし、クエリの実行方法を確認します。あなたの二つのテーブルが異なるデータベースにある場合これは、この

$this->Domain->recursive = 1; 
$data = $this->Domain->find('all'); 
// $data = Array ('Domain' => ********, 'Client' => ******) 
+0

彼は二つのテーブル(ドメインおよびクライアントが)別々のデータベースにあると述べている - 私は彼の問題は別のDBSにまたがるしようとしてだと思います。 –

+0

しかし、別のテーブルの一部である "Server.name"という列を使用できますか? – 472084

0

のように動作するはず

// in client.php model - having structure - id, name 
$hasMany = 'Domain'; 

// in domain.php model - having structure - id, name, client_id 
$belongsTo = 'Client'; 

あなたがモデルは、あなたが本当にあなたの人生を困難にしているべきです。 AFAIKでは、Cakeは2つの異なるデータベース間で2つのテーブルを結合する(または関係を強制する)ことをサポートしていません。なぜあなたは別のデータベースにクライアントテーブルを持っていますか?

テーブルを移動できない場合は、ドメインモデルにカスタムコードを記述する必要があると思います。そのため、ドメインに(デフォルトの)db接続文字列が使用されますが、別のdbリソースをもう一方のデータベースに接続します。方法については、http://bakery.cakephp.org/articles/doze/2010/03/12/use-multiple-databases-in-one-app-based-on-requested-urlを参照してください。「正しいデータベースを動的に選択する」の項に進みます。

HTH、 トラヴィス

+0

私は別のウェブサイトからそれらを借りているので、私は別のデータベースにそれらを持っています。私は、複数のデータベースをうまく動作させるように管理しました。 var $ useDbConfig = 'anotherdb'; – 472084

+0

そうですが、クエリの途中でdbConfig varを変更できるとは思いませんか?カスタム検索メソッドを作成する必要があるようです。 –

+0

もう1つの考え方は、他のデータベーステーブルにトリガを作成することです。作成/更新/削除時に、他のデータベースのデータをミラーリングするようトリガーします。 –

関連する問題