Cake PHP Version: 3.1.5
CakePHP 3: hasOne объединение не получает сохранены/создано
У меня есть проблема с сохранением в hasOne ассоциации, которая прекрасно работает на одном столе, но не со вторым.
Tickets
и Cashdrafts
связанные с Cashpositions
в имеют отношение к отношениям. Cashpositions имеет два FK для своего идентификатора. Поэтому, когда новое создание кассы автоматически создается, оно содержит либо a ticket_id
или a cashdraft_id
. Второй FK будет нулевым.
Дело в том, что сохранение билетов-Cashpositions работает нормально, поэтому каждый раз, когда создается билет, создается связанное с ним кассовое обслуживание. Но он не работает с 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, хотя новый рекорд для этого был успешно создан ...
и массив для нового cashdraft, где соответствующий cashposition не создается будет выглядеть, как это и сказать, «нулевой» для него:
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 t INSERT в соответствующую таблицу cashpositions. Но для cashdrafts нет INSERT, сделанного в связанной таблице. Поэтому, очевидно, Cake даже не пытается создать связанную запись.
У меня действительно нет идей! В самой базе данных оба FK настроены точно так же, имена верны и т. Д.
Есть ли у кого-нибудь представление о том, что может быть проблемой, или где я мог бы продолжить поиск причины, по которой вторая ассоциация не работает? Спасибо!
Вы используете 'Cake PHP версии: 1.3.5', который вы указали, или cakephp-3.0, который вы отметили? – Tsumannai
О, извините, я не видел, что я переключил номера там, я исправлю это. Я использую версию 3.1.5. – eve