Сохранение массива в базу данных в CakePHP - PullRequest
2 голосов
/ 06 декабря 2010

У меня нет идей, вот мой контроллер:

class GoogleNewsController extends AppController {
    var $name = 'GoogleNews';
    var $uses = array('GoogleNews', 'SavedNews');
    var $helpers = array('Html','Form');
    function index() {

$saved = $this->set('news',$this->GoogleNews->find('all'));

Я читаю данные из "GoogleNews", и они в моем массивеМассив выглядит так:

  array(10) {
  [0]=>
  array(1) {
    ["GoogleNews"]=>
    array(12) {
      ["title"]=>
      string(32) "FIFA 11 für 25,49€ aus Jersey"
      ["link"]=>
      string(54) "http://feedproxy.google.com/~r/myDealZ/~3/HuNxRhQJraQ/"
      ["pubDate"]=>
      string(31) "Mon, 06 Dec 2010 10:53:22 +0000"
      ["creator"]=>
      string(5) "admin"
      ["guid"]=>
      array(2) {
        ["value"]=>
    string(30) "http://www.mydealz.de/?p=15137"
    ["isPermaLink"]=>
    string(5) "false"
  }
  ["description"]=>
  string(355) "

И я хочу сохранить элементы в моей базе данных 'SavedNews', мне нужно сохранить описание и заголовок.Кто-нибудь может сказать мне, как мне написать это?

 $this->SavedNews->set(array('description' =>$this->GoogleNews->find('description')));

Это решение?Это единственный способ, которым он работает, но он помещает нулевые значения в мои столбцы.

1 Ответ

4 голосов
/ 06 декабря 2010

Если я правильно понимаю ваши требования, должно сработать следующее:

В вашем контроллере:

class NewsController extends AppController
{
    function import_from_google()
    {
        // Load the GoogleNews model and retrieve a set of its records
        $this->loadModel('GoogleNews');
        $newsFromGoogle = $this->GoogleNews->find('all');

        $this->loadModel('SavedNews');
        foreach ($newsFromGoogle as $_one) {

            // Reset the SavedNews model in preparation for an iterated save
            $this->SavedNews->create();

            // Assemble an array of input data appropriate for Model::save()
            // from the current GoogleNews row
            $saveable = array(
              'SavedNews' => array(
                'title' => $_one['GoogleNews']['title'],
                'description' => $_one['GoogleNews']['description']
              )
            );

            // send the array off to the model to be saved
            $this->SavedNews->save($saveable);
         }

         $this->autoRender = false; // No need to render a view
    }
}

Уточните, как требуется / требуется.Например, повторные операции сохранения должны происходить в модели SavedNews, а не в контроллере.Приведенный выше код также не имеет отказоустойчивости.

HTH.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...