2014-09-04 3 views
0

У меня есть следующая структура, которую я должен быть вставлен в целевой таблице:CakePHP Отношения Сохранить

Target стол:

target_id, client_crop_id, amount 

ClientCrop стол:

client_crop_id, client_id, crop_id 

Клиент стол:

client_id, client_name 

Crop стол:

crop_id, crop_name 

Мой вопрос: В момент вставки нового Target, на мой взгляд, имеет идентификатор клиента и урожая, как будет CakePHP знать, что поле client_crop_id в Target Model - это объединение, как указано выше? следует ли мне вызвать метод beforeSave() Target для получения идентификатора ClientCrop?

Спасибо.

+1

показывает отношения и есть definesd –

ответ

0

Вы можете добавить нужные поля, на ваш взгляд:

<?php 

echo $this->Form->hidden('ClientCrop.cient_id', array('value' => $yourVar)); 
echo $this->Form->hidden('ClientCrop.crop_id', array('value' => $yourVar)); 

?> 

Но я не рекомендую этот подход из-за безопасности. Попробуйте установить его прямо в действие вашего контроллера после сообщения:

<?php 

$this->request>data['ClientCrop']['client_id'] = $yourVar; 
$this->request>data['ClientCrop']['crop_id'] = $yourVar; 

?> 

Тогда вы должны использовать метод saveAssociated.

http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-saveassociated-array-data-null-array-options-array

+1

Хотя я полностью одобрить совет безопасности, то стоит заметить, что даже если вы оставите идентификаторы в представлении в виде скрытых значений, вы должны иметь компонент безопасности активируется, чтобы избежать форм вмешательства , – Nunser

+0

Хорошо, я понял, но он установит Target.client_crop_id в соответствующий ClientCrop client_id и crop_id? –

+0

Будет. CakePHP обнаружит отношения с моделями и сохранит связанные данные. – andtxr

Смежные вопросы