CakePHP сохраняет данные впервые (отношения hasMany)Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 CakePHP сохраняет данные впервые (отношения hasMany)

Сообщение Anonymous »

Хорошо, я пробую свой первый saveAll (или saveMany или saveAssociated, не уверен, что является «правильным»), который включает в себя отношение hasMany, и я не могу понять, как торту нужны эти данные. Я могу обновить поле имени в основной таблице, но не могу обновить связь hasMany.

Я просто ищу толчок в правильном направлении, я отчаянно пытаюсь научиться, но мысль о том, чтобы проделать дыру в стене с помощью головы, выглядит все более и более заманчивой.

Немного предыстории: у меня есть два стола и "продавцы" " и таблица "vendor_paid_types". таблица "vendors" имеет много "vendor_pay_types". Структура ниже:

таблица поставщиков
id, Company_id, имя
vendor_paid_types
id,vendor_id, type

текущий массив, который я отправляю в контроллер есть (если тип платежа имеет идентификатор, что означает, что он уже существует в базе данных и ничего не должно происходить, если идентификатора нет, его нужно добавить, третья часть заключается в том, что если он существует в базе данных, но не в этой массив, его необходимо удалить из базы данных):

Код: Выделить всё

Array
(
[0] => Array
(
[Vendor] => Array
(
[id] => 7
[company_id] => 2
[name] => Test Vendor
[VendorPaymentTypes] => Array
(
[0] => Array
(
[vendor_id] => 7
[id] => 13
[type] => payable
)

[1] => Array
(
[vendor_id] => 7
[type] => check
)

[2] => Array
(
[vendor_id] => 7
[id] => 14
[type] => cash
)

)

)

)
Мне нужно: а) обновить имя; б) добавить все новые типы VendorType; в) удалить все типы VendorType, которых нет в массиве POST, но которые существуют в массиве. база данных. В моем VendorController у меня есть следующее:

Код: Выделить всё

public function save() {
$vendors = array();
$companyid = $this->Auth->user('company_id');
$needle = 'new';
$i = 0;

// Setup array and also if id of payment_type includes "new" unset the id so cake will add a new and not try and match id and update

if ($this->request->is('post')) {
foreach ($this->request->data['Vendor'] as $vendorId => $vendor) {
$vendors[$vendorId]['Vendor']['id'] = $vendorId;
$vendors[$vendorId]['Vendor']['company_id'] = $companyid;
$vendors[$vendorId]['Vendor']['name'] = $vendor['name'];
foreach ($vendor['VendorTypes'] as $type => $val) {
if ($val != '0') {
$vendors[$vendorId]['Vendor']['VendorPaymentTypes'][$i]['vendor_id'] = $vendorId;
$vendors[$vendorId]['Vendor']['VendorPaymentTypes'][$i]['id'] = $val;
$vendors[$vendorId]['Vendor']['VendorPaymentTypes'][$i]['type'] = $type;

if (strstr($vendors[$vendorId]['Vendor']['VendorPaymentTypes'][$i]['id'], $needle)) {
unset($vendors[$vendorId]['Vendor']['VendorPaymentTypes'][$i]['id']);
}
$i++;
}
}
}

// Clean up array to make it an array starting at 0 and not based on vendor['id']

$cleanedarr = array();
foreach ($vendors as $vendor => $data) {
$cleanedarr[] = $data;
}

// Currently this only updates the name

if ($this->Vendor->saveAll($cleanedarr, array('deep' => TRUE) )) {
$this->Session->setFlash('Updated Vendors!');
die(pr($this->Vendor->getDataSource()->getLog()));
} else {
$this->Session->setFlash('Failed to Update');
}
}
}
Модель поставщика настроена как

Код: Выделить всё

public $name = 'Vendor';

public $hasMany = array(
'VendorPaymentTypes' => array(
'className' => 'VendorPaymentTypes',
'foreignKey' => 'vendor_id',
'dependent' => true
)
);
Я даже не начал заниматься удалением, потому что не могу добавить новые вендор_типы. провел хороший день в бесчисленных «попытках», которые ни к чему не привели.

Спасибо миллион раз за любую помощь!

Подробнее здесь: https://stackoverflow.com/questions/136 ... lationship
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»