Cake PHP Version: 3.1.5
CakePHP的3:hasOne關聯沒有得到保存/創建
我有一個問題,節省了hasOne協會,在一個表上工作正常,但不與第二。
Tickets
和Cashdrafts
與Cashpositions
在屬於關係。 Cashpositions爲他們的身份證持有兩個FK。因此,當一個新的cashposition是自動創建它擁有要麼一個ticket_id
或一個cashdraft_id
。第二個FK將爲空。
的事情是,該門票,Cashpositions節能工作正常,所以每次一票時,就產生了相關cashposition。但它不適用於Cashdrafts-Cashpositions。我不明白爲什麼,因爲設置和關係完全一樣。
下面是設置:
class CashpositionsTable extends Table
{
public function initialize(array $config)
{
$this->belongsTo('Tickets', [
'foreignKey' => 'ticket_id'
]);
$this->belongsTo('Cashdrafts', [
'foreignKey' => 'cashdraft_id'
]);
}
}
class TicketsTable extends Table
{
public function initialize(array $config)
{
$this->hasOne('Cashpositions', [
'foreignKey' => 'ticket_id'
]);
}
}
class CashdraftsTable extends Table
{
public function initialize(array $config)
{
$this->hasOne('Cashpositions', [
'foreignKey' => 'cashdraft_id'
]);
}
}
然後在添加控制器()函數:
class TicketsController extends AppController
{
public function add($memberId = null)
{
$ticket = $this->Tickets->newEntity();
if ($this->request->is('post')) {
$ticket = $this->Tickets->patchEntity($ticket, $this->request->data, [
// working fine: creates new cashposition for this ticket
'associated' => ['Cashpositions']
]);
if ($this->Tickets->save($ticket)) {
$this->Flash->success(__('ticket saved'));
return $this->redirect(['action' => 'view', $ticket->$id]);
} else {
$this->Flash->error(__('ticket could not be saved'));
}
}
class CashdraftsController extends AppController
{
public function add()
{
$cashdraft = $this->Cashdrafts->newEntity();
if ($this->request->is('post')) {
$cashdraft = $this->Cashdrafts->patchEntity($cashdraft, $this->request->data,[
// fail: no associated record created
'associated' => ['Cashpositions']
]);
if ($this->Cashdrafts->save($cashdraft)) {
$this->Flash->success(__('cashdraft saved.'));
return $this->redirect(['action' => 'view', $cashdraft->id]);
} else {
$this->Flash->error(__('cashdraft could not be saved'));
}
}
}
我調試的$票和$ cashdraft。但我不能說我理解的輸出,因爲:
的數組中票將顯示每一個相關的數據,但沒有cashposition,雖然它的新記錄已成功創建...
和數組新在沒有建立相關的cashposition cashdraft會這個樣子,說「空」吧:
object(App\Model\Entity\Cashdraft) {
'id' => (int) 10,
'amount' => (float) -7,
'created' => object(Cake\I18n\Time) {
'time' => '2015-12-13T20:03:54+0000',
'timezone' => 'UTC',
'fixedNowTime' => false
},
'modified' => object(Cake\I18n\Time) {
'time' => '2015-12-13T20:03:54+0000',
'timezone' => 'UTC',
'fixedNowTime' => false
},
'cashposition' => null, // this part not even showing up for a "ticket" in the debug
'[new]' => false,
'[accessible]' => [
'*' => true
],
'[dirty]' => [],
'[original]' => [],
'[virtual]' => [],
'[errors]' => [],
'[repository]' => 'Cashdrafts'
}
在SQL在DebugKit我可以看到,對於ticke INSERT到相關的地址表中就完成了。但對於cashdrafts沒有INSERT完成到相關表。所以顯然Cake甚至不嘗試創建關聯的記錄。
我真的出出主意吧!在數據庫本身中,兩個FK的設置完全一樣,名稱也是正確的。
有沒有人知道問題可能出在哪裏,或者我可以在哪裏進一步搜索第二個關聯不起作用的原因?謝謝!
是否使用'蛋糕PHP版本:你說的1.3.5',還是你標記的cakephp-3.0? – Tsumannai
哦,對不起,我沒有看到我在那裏切換數字,我會糾正這一點。我使用版本3.1.5。 – eve