0

次のことを達成するためにモデルを適切にリンクする方法があるかどうかを把握しようとしています:

クライアント -> イニシアチブ -> マイルストーンの 3 つのテーブルがあります。

私が持っているクライアントで:

public $hasMany = array( 'Initiative'  );

イニシアチブモデルには次のものがあります。

public $belongsTo = 'Client';
public $hasMany = 'Milestone'

マイルストーンには次の機能があります。

public $belongsTo = 'Initiative';

public $recursive = 2; の使用 クライアントモデルでは、結果のイニシアチブにネストされたマイルストーンを取得できるため、次のようになります...

array(2) {
["Client"]=>
array(3) {
  ["id"]=>
  string(1) "3"
  ["name"]=>
  string(17) "Company"
 }
["Initiative"]=>
array(5) {  
  [0]=>
  array(8) {
    ["id"]=>
    string(1) "6"
    ["client_id"]=>
    string(1) "3"
    ["Milestone"]=>
    array(4) {
      [0]=>
      array(6) {
        ["id"]=>
        string(1) "1"
        ["initiative_id"]=>
        string(1) "6"
       }
      [1]=>
      array(6) {
        ["id"]=>
        string(1) "2"
        ["initiative_id"]=>
        string(1) "6"
      }

または短縮形を使用するには:

result
  [client]
  [initiative]
        [milestone]     

しかし、便宜上、モデルがイニシアチブにネストされていない独自の配列であるため、モデルがマイルストーンを返すことを望んでいます。そう、

result
  [client]
  [initiative]
  [milestone]

モデルに何らかのカスタム クエリを設定する必要があると思います。これどうやってするの?

4

1 に答える 1

0

私は、これは不可能だったと思います

クライアント --- hasMany ---> イニシアチブ

イニシアチブ --- hasMany ---> マイルストーン

したがって、クライアント情報を取得すると、それを使用して複数のイニシアチブが取得され、イニシアチブを取得すると、複数のマイルストーンが表示されます。

それでもすべてのマイルストーンを結合して最初のレベルに表示したい場合は、配列の値をトラバースして手動でマイルストーンを取得する必要があります。

于 2013-10-25T07:01:31.547 に答える