2013-07-30 10 views
0

У меня есть модель в Cakephp и вы хотите изменить поле в функции beforeSave, но сохраненные данные неверны.CakePHP Как изменить поле в beforeSave

Вот моя функция:

public function beforeSave($options = array()) { 

    $address = @ClassRegistry::init('Address')->read(null, $this->data['Entry']['address_id']); 

     if($address != false) { 
      $url_address = $address['Address']['address']." ".$address['Address']['zip']." ".$address['Address']['city']; 
      $geocode = file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.urlencode($url_address).'&sensor=false'); 
      $output = json_decode($geocode); 

      $lat = @$output->results[0]->geometry->location->lat; 
      $lng = @$output->results[0]->geometry->location->lng; 

      $this->data['Entry']['latitude'] = 0; 
     $this->data['Entry']['longitude'] = 0; 

     if($output->status == "OK") { 
      $this->data['Entry']['latitude'] = $lat; 
      $this->data['Entry']['longitude'] = $lng; 
     } 
    } 

    return true; 
} 

Результат от GoogleAPI правильно, я проверил это, написав:

print_r($this->data); 
exit(); 

только данные, записанные в БД не является правильным. Не знаю, почему - какие-то идеи ???

Thx

+0

Что такое название вашей модели? –

+0

Я бы не использовал '@ClassRegistry:' calls (@ здесь плохо). Я также не буду кодировать слишком много этого конкретного запроса сторонней api в метод beforeSave модели. Попробуйте обернуть его с помощью lib или поведения. Подсказка: http://www.dereuromark.de/2012/06/12/geocoding-with-cakephp/ – mark

+0

Название модели - «Запись» –

ответ

0

Мы используем это:

lat  decimal(10,8) 
lng  decimal(11,8) 
+0

Спасибо, но это «только «экономит место, но не решает проблему сохранения. –

+0

Возможно ли, что проверка не удалась? Что значит «неправильно»? – tersmitten

+0

Нет, валидация работает, проблема в том, что если я выберу город, такой как Бремен (Германия) и сохраню вход, то в базе данных этой сохраненной записи согласуются мюнхенцы. который составляет около 1000 км ... Если я сохраню его снова, он сохранит бремены - я думаю, что это проблема кэширования, но я не знаю, откуда взялись значения –

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

  • Нет связанных вопросов^_^