0

まず、この質問の名前について申し訳ありません。私はそれを何と呼ぶか​​を理解するのに苦労しました:

これが私の問題です。次の2つのデータテーブルがあります。

Users

Employees.

これらの 2 つのデータ テーブルは 1 対 1 の関係で接続されています

現在、これらの両方にモデル、ビュー、およびコントローラーがあります。今、私の質問は、最初に難しい部分の2つの部分に分かれています。

従業員が新しいユーザー (新入社員) を作成したいときはいつでも、最初にテーブルの 2 つのテーブルにデータを挿入し、次にテーブルにレコードを追加したusers後にデータを挿入する必要があります。user_idemployee

従業員テーブルは次のようになります。

users_idUsers client_id

ユーザーテーブルのどこusers_idUsersにありますかuserid

これをどのように回避しますか?私の従業員モデルに別のモデルの機能を追加することは可能ですか?

2 番目の質問はこれの延長であり、比較的単純です。すべての従業員を表示したいのですが、ビューにユーザーのユーザー名を表示できるように、ビューをユーザーと結合する必要があります。

私はCakeを初めて使用するので、何人かが私を助けてくれることを願っています.

4

1 に答える 1

2

あなたが求めているのは、2 つのモデルをリンクすることです。CakePHP には、「最後の挿入から id を取得し、それを使用して別のことを行う」必要なく、これらすべてを行う堅実なリレーションシップ マッパーがあります。

私が間違っていなければ、あなたの問題は簡単に言えば次のとおりです。

An Employee hasMany users

A User belongs to one Employee

1 対多のモデル関係のために、CakePHP には「hasMany」と呼ばれるものがあります: http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasmany

たとえば、ユーザーが多くのコメントを作成できるのと同じ方法です。従業員は多くのユーザーを作成できます。

ユーザーと従業員の間の関係の裏返しとして、「belongsTo」マッピングが必要になるため、ユーザーが従業員によって追加されたことがわかります: http://book.cakephp.org/2.0/en/models /associations-linking-models-together.html#belongsto

このようにして、いわば「ユーザーを通じて」検索することで、「ユーザー X」を追加した従業員を見つけることができます。

モデルを一緒にマッピングすると、データの取得 (findBy: http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#findbyなど) やモデルの関係の管理がはるかに簡単になります。リレーションがどのように連鎖するか (上記で概説したモデル マッピングの目的) についてあまり考える必要はなく、何を取得したいかについて考える必要があるためです。

次に、このようなことを直感的に行うことができます

$this->Employee->find('all', array(
            'recursive' => 1,
            'fields' => array('employee.name, employee.age')
            ));

または、ユーザー「Sarah」を追加した従業員を見つけたい場合。

$this->Employee->User->find('all', array(
'conditions' => array('User.name' => 'Sarah'),
'fields' => 'Employee.*',
'recursive' => 0))

これにより、従業員との連想配列が返されます。

補足として: recursive = 1 の使用は少し時代遅れです。必要なものに基づいてモデルを注入できるようにする「Containable」と呼ばれる、はるかに優れたものがあります。この問題の範囲外ですが、言及したいと思います。

于 2013-08-09T10:06:27.317 に答える