2017-04-19 102 views
0

我使用CakePHP 3.4記錄包含模型CakePHP的3

我獲取的用戶信息,如

$user = $this->Users->get($id, [ 
    'contain' => [ 
     'UserAddresses.States.Countries' => ['conditions' => [ 
       'UserAddresses.deleted' => false]], 
    ], 
]); 

這裏,UserAddressesuser_id柱和state_id列和States表有country_id列。

如果在表中沒有關聯user_address,然後我給 record not found錯誤 同時消除States.Countriescontain正常工作,即使記錄在UserAddresses

編輯2不存在:關係

UsersTable.php

$this->hasOne('UserAddresses', [ 
    'foreignKey' => 'user_id' 
]); 

UserAddressesTable.php

$this->belongsTo('Users', [ 
    'foreignKey' => 'user_id', 
    'joinType' => 'INNER' 
]); 
$this->belongsTo('States', [ 
    'foreignKey' => 'state_id', 
    'joinType' => 'INNER' 
]); 

StatesTable.php

$this->belongsTo('Countries', [ 
    'foreignKey' => 'country_id', 
    'joinType' => 'INNER' 
]); 
$this->hasMany('UserAddresses', [ 
    'foreignKey' => 'state_id' 
]); 

CountriesTable.php

$this->hasMany('States', [ 
    'foreignKey' => 'country_id' 
]); 

回答

3

正如Kilian Schuster所說,您的病情正在應用於Countries。我改變了它,波紋管嘗試代碼:

$user = $this->Users->get($id, [ 
    'contain' => [ 
     'UserAddresses' => [ 
      'conditions' => [ 
       'UserAddresses.deleted' => false 
      ] 
     ], 
     'UserAddresses.States.Countries' 
    ] 
]); 

編輯:record not found錯誤可能由Inner join類型在美國模式的國家造成的,如果沒有涉及到了用戶地址。如果關係是可選的,則將聯接類型更改爲Left

+0

我也試過這個。但不起作用 –

+0

更新你的問題,並告訴哪些模型之間的關係,取決於它,你應該使用matching()或innerJoinWith()。 –

+0

更新的問題與關係 –

0

用叔他的語法,你實際上試圖將條件應用到「國家」模型,而不是「用戶地址」模型。