CakePHP имеет многое не экономя - PullRequest
0 голосов
/ 21 марта 2012

Я работаю над CakePHP 2.0 и вот мой код:

class Sheet extends AppModel{

    var $name = 'fc_sheets';
    var $hasMany = array(
        'Apspent' => array(
            'className' => 'Adspent',
            'foreignKey'=> 'sheetID',
        ),
    ); 
}

class Adspent extends AppModel{

    var $name = 'fc_adspents';
    var $hasOne = 'Sheet';
    var $belongsTo = 'Sheet';

}

В контроллере:

class SheetsController extends AppController{

    var $name = 'Sheets';

    function add(){
        $this->Sheet->save($this->data);
        //I have also tried this
        $this->Sheet->saveAll($this->data);
    }
}

Вот отладка print_r($this->data):

Array ( 
    [Adspent] => Array ( [description] => Array ( [0] => Yellow Pages ) [price] => Array ( [0] => 200 ) ) 
    [Sheet] => Array ( [adFundConst] => 2 [warrFundConst] => 1 [pst] => 8 [gst] => 5 [hst] => 13 [adspent] => 200.00 [percentAdv] => Infinity [normalSales] => 0.00 [extraSales] => 0.00 [totalSales] => 0.00 [adFund] => 0.00 [warrFund] => 0.00 [royalty] => 200.00 [tax] => 26.00 [total] => 226.00 [matTotal] => 0.00 [totalDue] => 226.00 )
)

Но данные листа - это единственное сохранение в базе данных, а не другое.

Кто-нибудь имеет представление, что я сделал не так?

Ответы [ 3 ]

0 голосов
/ 21 марта 2012

Это может быть вызвано тем, что данные в полях Adspent description и price являются массивами.

У вас есть следующее:

Array ( 
    [Adspent] => Array (
        [description] => Array ( [0] => Yellow Pages )
        [price] => Array ( [0] => 200 ) 
    ) 
    [Sheet] => Array ( 
        [adFundConst] => 2
        [warrFundConst] => 1 
        [pst] => 8 
        [gst] => 5 
        [hst] => 13
        [adspent] => 200.00 
        [percentAdv] => Infinity 
        [normalSales] => 0.00 
        [extraSales] => 0.00
        [totalSales] => 0.00 
        [adFund] => 0.00 
        [warrFund] => 0.00 
        [royalty] => 200.00 
        [tax] => 26.00 
        [total] => 226.00 
        [matTotal] => 0.00 
        [totalDue] => 226.00
    )
)

Попробуйте изменить форму, чтобы вашформировать данные без массивов в полях description и price, например:

Array ( 
    [Adspent] => Array (
        [description] => Yellow Pages
        [price] => 200 
    ) 
    [Sheet] => Array ( 
        [adFundConst] => 2
        [warrFundConst] => 1 
        [pst] => 8 
        [gst] => 5 
        [hst] => 13
        [adspent] => 200.00 
        [percentAdv] => Infinity 
        [normalSales] => 0.00 
        [extraSales] => 0.00
        [totalSales] => 0.00 
        [adFund] => 0.00 
        [warrFund] => 0.00 
        [royalty] => 200.00 
        [tax] => 26.00 
        [total] => 226.00 
        [matTotal] => 0.00 
        [totalDue] => 226.00
    )
)

, а затем сохранить, попробуйте:

$this->Sheet->saveAssociated($this->request->data)
0 голосов
/ 21 марта 2012

Поскольку вы упомянули отношение hasMany, тогда ваша структура массива должна выглядеть следующим образом.

Array ( 
    [Adspent] => Array (
        [description] => Yellow Pages
        [price] => 200 
    ) 
    [Sheet] => 
[0] => Array ( 
        [adFundConst] => 2
        [warrFundConst] => 1 
        [pst] => 8 
        [gst] => 5 
)
[1] => Array ( 
        [adFundConst] => 2
        [warrFundConst] => 1 
        [pst] => 8 
        [gst] => 5 
    )
)

Попробуйте сформировать массив в указанном выше формате и посмотреть. Для более подробной информации, пожалуйста, обратитесь http://book.cakephp.org/1.3/en/view/1032/Saving-Related-Model-Data-hasOne-hasMany-belongsTo

0 голосов
/ 21 марта 2012
'dependent'=> true 

добавь это в свои отношения

var $hasMany = array(
    'Apspent' => array(
        'className' => 'Adspent',
        'foreignKey'=> 'sheetID',
        'dependent'=> true, 
    ),
);

Я могу решить твою проблему ...

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