Я не вижу в этом документально нигде, поэтому я прошу вас, мои дорогие ежики.Безопасно ли выполнять запрос с помощью модели во время обратного вызова BeforeSave поведения?
ВнутриBehavior::BeforeSave(&$Model)
метод а CakePHP, я читать и писать изменения в $Model->data
массива. Прежде чем я закончу, мне нужно прочитать некоторые другие записи из базы данных. Я волнуюсь, что, если я использую $Model->find()
, он перезапишет текущие данные в модели, которая вот-вот будет сохранена.
Просмотр исходного кода, функция Model::find()
явно сбрасывает переменную Model::$id
. Это та же самая переменная, которую я позже использую, чтобы проверить, обновляется ли поле.
Вот пример:
<?php
class UniqueBehavior extends ModelBehavior {
function beforeSave(&$Model){
$value = $Model->data[$Model->alias]['unique_field'];
$query = array('conditions' => array('unique_field' => $value));
if ($Model->find('first', $query){
// Does $Model::find() reset the internal $Model->data array?
$Model->data[$Model->alias]['unique_field'] = "..."
//... some other code here
}
//ALSO...
if ($Model->exists()) // Returns true if a record with the currently set ID exists.
$slug = $Model->field('slug');
// this should fetch the slug of the currently updated Model::id from the database
// if I do find()'s, can I trust that the record I'm getting is the right one?
}
}
?>
Какая битва $ Model-> свойство данных? Должен ли я также сохранить его во временном массиве? –
, если он также изменен, что, вероятно, будет разумным – mark
Делает смысл. Документы для торта немного скудны по областям, ссылкам, запросам и обратным вызовам. Мне пришлось прорыть много кода ядра, чтобы понять их структуру MVC. –