2012-05-04 19 views
0

CakePHPアプリケーションでモデルを作成し、そのモデルをcakePHPアプリケーションに関連付けられていないデータベーステーブルに関連付けることは可能ですか?cakephpモデルをnon-cakephpデータベーステーブルに関連付けます

たとえば、そのデータベーステーブルは別のアプリケーションに属しており、そのテーブルを使用するCakePHPでモデルを作成したいので、テーブルはCakePHPの規約に完全に準拠していません。これはどうすればいいですか?テーブルを変更せずにその関連付けを動作させるために私のモデルに入れる必要があるもの(そのテーブルで基本的なCRUD操作を実行できる必要があります)

どうぞよろしくお願いします。

ありがとう

+0

テーブルがどのように見えるか私たちを見ると、私たちはあるかもしれません... –

答えて

1

はい、これは可能です。あなたはidCandidat主キーを持つCANDテーブルを持っている場合たとえば、あなたは、モデルを作成し、$ useTable & $のPrimaryKeyプロパティを使用します。

class Candidat extends AppModel{ 
var $name = 'Candidats'; 
var $useTable = 'cand'; 
var $primaryKey = 'idCandidat'; 
//etc. 
} 

をし、あなたがやっているよようにあなたは、コントローラでモデルを使用し続けます普通のもの。

0

完全に異なるデータベースにあるテーブルを使用することも、別のサーバー上で使用することもできます。あなたが使用することができ、この(私はそれが正しいよう@chroonossの例を拡張します)の場合:

class Candidat extends AppModel{ 
var $name = 'Candidats'; 
var $useTable = 'cand'; 
var $primaryKey = 'idCandidat'; 

var $usedbConfig = 'external'; 
} 

これは、異なるデータソースconnetionを使用できるようになります。これらは、 app/config/database.phpで定義されています。あなたは、これが機能する例が「外部」という名前のプロパティを持っている必要があります:

public $external = array(
     'datasource' => 'Database/Mysql', 
     'persistent' => false, 
     'host' => '101.180.10.17', 
     'login' => 'username', 
     'password' => 'yourTopSecretPassword', 
     'database' => 'database_name', 
     'prefix' => '', 
     'encoding' => 'utf8', 
    ); 

もちろん、あなたが好きなようにあなたのデータソースに名前を付けることができます。

+0

モデルのフィールドの名前を変更したい場合(たとえば、データベースに 'phone'というフィールドがあるとしましょうが、モデルがそのフィールドを'電話)。それをどうやってやりますか?私のモデルにテーブルのすべての列を使用したくない場合(テーブルのいくつかの列をモデルに関連付けたいとします)どうすればいい? – user765368

+0

'fields' => array( 'field1'、 'field2'、 'field3')を含めるためにModel :: find()呼び出しを変更するだけです。このように、find()関数の戻り値には、リストされたフィールドのみが含まれます。私は個人的に、モデルそのものを変更するための他の方法を知らない。これをチェックしてください: http://book.cakephp.org/1.3/ja/view/1017/Retrieving-Your-Data –

0

あなたはfind関数でフィールド(列)を設定することができます - http://book.cakephp.org/1.3/en/view/1018/find それとも、協会にフィールドを設定したい場合は、この操作を行うことができます。

var $belongsTo = array(
    'User' => array(
    'className' => 'User', 
    'foreignKey' => 'user_id', 
    'fields' => array('name','phone') 
    ) 
); 
関連する問題