Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

Data Model Questions /

Can't add new DataObject with property of type 'Currency'


Reply


2 Posts   1275 Views

Avatar
Erin

Community Member, 26 Posts

31 May 2010 at 12:03pm

Edited: 31/05/2010 12:06pm

Hi guys!
I'm having a problem that I'm hoping someone here can help me with.

First the basics:
I have a dataobject of type Item. Item has 3 static properties - Name(Text), Description(HTMLText) and Price(Currency).

class Item extends DataObject{
   static $db = array(
      'Name' => 'Text',
      'Description' => 'HTMLText',
      'Price' => 'Currency'
   );
   static $defaults = array(
      'Name' => 'Hamburger',
      'Price' => 4.99
   );   
   static $has_one = array(
      'ItemCategories' => 'ItemCategory'
   );
   function getCMSFields_forPopup() {
      $fields = new FieldSet();
      $fields->push( new TextField('Name'));
      $fields->push( new TextareaField('Description'));
      $fields->push( new CurrencyField('Price'));
      return $fields;
   }
}

When I try to add a new Item, it errors, like this:

[User Error] Couldn't run query: INSERT INTO `Item` SET Created = NOW() Field 'Price' doesn't have a default value
POST /bbd/s/admin/cms/EditForm/field/Meals/item/2/DetailForm/field/ItemCategories/item/3/DetailForm/field/Items/AddForm?ctf[Items][start]=0&ctf[Items][per_page]=10&ctf[Items][showall]=0&ctf[Items][sort]=Created&ctf[Items][sort_dir]=DESC&ctf[Items][search]=&ctf[Items][filter]=

Line 401 in C:\****\bbd\s\sapphire\core\model\MySQLDatabase.php
Source

392    }
393    
394    function databaseError($msg, $errorLevel = E_USER_ERROR) {
395       // try to extract and format query
396       if(preg_match('/Couldn\'t run query: ([^\|]*)\|\s*(.*)/', $msg, $matches)) {
397          $formatter = new SQLFormatter();
398          $msg = "Couldn't run query: \n" . $formatter->formatPlain($matches[1]) . "\n\n" . $matches[2];
399       }
400       
401       user_error($msg, $errorLevel);
402    }
403 }
404
405 /**
406 * A result-set from a MySQL database.
407 * @package sapphire

Trace

* Couldn't run query: INSERT INTO `Item` SET Created = NOW() Field 'Price' doesn't have a default value
Line 401 of MySQLDatabase.php

When I change the Price's type from Currency to Text, I can add a new Item without problems. I can also update existing items without error, whether the type is Currency or Text.

Can I anyone give me an idea what I'm missing in all this?

Avatar
mark_s

Community Member, 78 Posts

3 June 2010 at 11:24pm

Hi.

What database are you using? And what code are you using to create the Item?

Mark