apidoc
[ class tree: apidoc ] [ index: apidoc ] [ all elements ]

Class: DB_DataObject

Source Location: /DB_DataObject-1.7.6/DataObject.php

Class Overview

DB_DataObject_Overload
   |
   --DB_DataObject

storage for connection and result objects, it is done this way so that print_r()'ing the is smaller, and it reduces the memory size of the object.


Variables

Methods


Child classes:

DB_DataObject_Generator
Generator class

Inherited Variables

Inherited Methods


Class Details

[line 222]
storage for connection and result objects, it is done this way so that print_r()'ing the is smaller, and it reduces the memory size of the object.

-- future versions may use $this->_connection = & PEAR object.. although will need speed tests to see how this affects it.

    • connections = md5 sum mapp to pear db object
    • results = [id] => map to pear db object
    • resultseq = sequence id for results & results field
    • resultfields = [id] => list of fields return from query (for use with toArray())
    • ini = mapping of database to ini file results
    • links = mapping of database to links file
    • lasterror = pear error objects for last error event.
    • config = aliased view of PEAR::getStaticPropery('DB_DataObject','options') * done for performance.
    • array of loaded classes by autoload method - to stop it doing file access request over and over again!



    [ Top ]


    Class Variables

    $N =  0

    [line 246]

    The Number of rows returned from a query
    • Access: public

    Type:   int


    [ Top ]

    $_lastError =  false

    [line 3556]

    Last Error that has occured
    • use $this->_lastError or
    $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError');
    • Var: (or false)
    • Access: public

    Type:   object PEAR_Error


    [ Top ]



    Method Detail

    count   [line 1392]

    int count( [bool|string $countWhat = false], [bool $whereAddOnly = false])

    Find the number of results from a simple query

    for example

    $object = new mytable(); $object->name = "fred"; echo $object->count(); echo $object->count(true); // dont use object vars. echo $object->count('distinct mycol'); echo $object->count('distinct mycol',true); // dont use object vars.

    • Access: public

    Parameters:

    bool   $whereAddOnly   —  (optional) If DB_DATAOBJECT_WHEREADD_ONLY is passed in then we will build the condition only using the whereAdd's. Default is to build the condition using the object parameters as well.
    bool|string   $countWhat   —  (optional) (true|false = see below not on whereAddonly) (string) $countWhat (optional) normally it counts primary keys - you can use this to do things like $do->count('distinct mycol');

    [ Top ]

    database   [line 1717]

    string database( string 0)

    Return or assign the name of the current database
    • Return: The name of the current database
    • Access: public

    Parameters:

    string   0   —  optional database name to set

    [ Top ]

    databaseStructure   [line 1572]

    true databaseStructure( optional 0, optional 1, optional 2)

    Autoload or manually load the table definitions

    usage : DB_DataObject::databaseStructure( 'databasename', parse_ini_file('mydb.ini',true), parse_ini_file('mydb.link.ini',true));

    obviously you dont have to use ini files.. (just return array similar to ini files..)

    It should append to the table structure array

    • Return: or PEAR:error on wrong paramenters.. or false if no file exists.. or the array(tablename => array(column_name=>type)) if called with 1 argument.. (databasename)
    • Access: public

    Parameters:

    optional   0   —  string name of database to assign / read
    optional   1   —  array structure of database, and keys
    optional   2   —  array table links

    [ Top ]

    debug   [line 3495]

    none debug( string $message, [string $logtype = 0], [string $level = 1])

    Debugger. - use this in your extended classes to output debugging information.

    Uses DB_DataObject::DebugLevel(x) to turn it on

    • Access: public

    Parameters:

    string   $message   —  - message to output
    string   $logtype   —  - bold at start
    string   $level   — 
    • output level

    [ Top ]

    debugLevel   [line 3534]

    none debugLevel( [int $v = null])

    sets and returns debug level eg. DB_DataObject::debugLevel(4);
    • Access: public

    Parameters:

    int   $v   —  level

    [ Top ]

    delete   [line 1256]

    mixed delete( [bool $useWhere = false])

    Deletes items from table which match current objects variables

    Returns the true on success

    for example

    Designed to be extended

    $object = new mytable(); $object->ID=123; echo $object->delete(); // builds a conditon

    $object = new mytable(); $object->whereAdd('age > 12'); $object->limit(1); $object->orderBy('age DESC'); $object->delete(true); // dont use object vars, use the conditions, limit and order.

    • Return: True on success, false on failure, 0 on no data affected
    • Access: public

    Parameters:

    bool   $useWhere   —  (optional) If DB_DATAOBJECT_WHEREADD_ONLY is passed in then we will build the condition only using the whereAdd's. Default is to build the condition only using the object parameters.

    [ Top ]

    escape   [line 1473]

    string escape( string $string)

    an escape wrapper around DB->escapeSimple() can be used when adding manual queries or clauses eg.

    $object->query("select * from xyz where abc like '". $object->escape($_GET['name']) . "'");

    • Access: public

    Parameters:

    string   $string   —  value to be escaped

    [ Top ]

    fetch   [line 468]

    boolean fetch( )

    fetches next row into this objects var's

    returns 1 on success 0 on failure

    Example $object = new mytable(); $object->name = "fred"; $object->find(); $store = array(); while ($object->fetch()) { echo $this->ID; $store[] = $object; // builds an array of object lines. }

    to add features to a fetch function fetch () { $ret = parent::fetch(); $this->date_formated = date('dmY',$this->date); return $ret; }

    • Return: on success
    • Access: public

    [ Top ]

    fetchRow   [line 1320]

    boolean fetchRow( [int $row = null])

    fetches a specific row into this object variables

    Not recommended - better to use fetch()

    Returens true on success

    • Return: true on success
    • Access: public

    Parameters:

    int   $row   —  row

    [ Top ]

    find   [line 378]

    int find( [boolean $n = false])

    find results, either normal or crosstable

    for example

    $object = new mytable(); $object->ID = 1; $object->find();

    will set $object->N to number of rows, and expects next command to fetch rows will return $object->N

    • Access: public

    Parameters:

    boolean   $n   —  Fetch first result

    [ Top ]

    free   [line 3629]

    none free( )

    Free global arrays associated with this object.

    Note: as we now store resultfields in a global, it is never freed, if you do alot of calls to find(), memory will grow gradually.

    • Access: public

    [ Top ]

    fromValue   [line 3322]

    true| fromValue( string $col, mixed $value)

    standard set* implementation.

    takes data and uses it to set dates/strings etc. normally called from __call..

    Current supports date = using (standard time format, or unixtimestamp).... so you could create a method : function setLastread($string) { $this->fromValue('lastread',strtotime($string)); }

    time = using strtotime datetime = using same as date - accepts iso standard or unixtimestamp. string = typecast only..

    TODO: add formater:: eg. d/m/Y for date! ???

    • Return: false (False on error)
    • See: DB_DataObject::_call
    • Access: public

    Parameters:

    string   $col   —  column of database
    mixed   $value   —  value to assign

    [ Top ]

    get   [line 274]

    int get( [string $k = null], [string $v = null])

    Get a result using key, value.

    for example $object->get("ID",1234); Returns Number of rows located (usually 1) for success, and puts all the table columns into this classes variables

    see the fetch example on how to extend this.

    if no value is entered, it is assumed that $key is a value and get will then use the first key in keys() to obtain the key.

    • Return: No. of rows
    • Access: public

    Parameters:

    string   $k   —  column
    string   $v   —  value

    [ Top ]

    getDatabaseConnection   [line 3175]

    object The &getDatabaseConnection( )

    Gets the DB object related to an object - so you can use funky peardb stuf with it :)
    • Return: DB connection
    • Access: public

    [ Top ]

    getDatabaseResult   [line 3197]

    object The &getDatabaseResult( )

    Gets the DB result object related to the objects active query
    • so you can use funky pear stuff with it - like pager for example.. :)

    • Return: DB result object
    • Access: public

    [ Top ]

    getLink   [line 2544]

    mixed &getLink( string $row, [string $table = null], [string $link = false])

    return name from related object

    There are two ways to use this, one is to set up a <dbname>.links.ini file into a static property named <dbname>.links and specifies the table joins, the other is highly dependant on naming columns 'correctly' :)

    NOTE: the naming convention is depreciated!!! - use links.ini

    using colname = xxxxx_yyyyyy xxxxxx = related table; (yyyyy = user defined..) looks up table xxxxx, for value id=$this->xxxxx stores it in $this->_xxxxx_yyyyy

    you can also use $this->getLink('thisColumnName','otherTable','otherTableColumnName')

    • Return: object on success
    • Author: Tim White <tim@cyface.com>
    • Access: public

    Parameters:

    string   $row   —  either row or row.xxxxx
    string   $table   —  name of table to look up value in
    string   $link   —  name of column in other table to match

    [ Top ]

    getLinkArray   [line 2622]

    array &getLinkArray( $row, [ $table = null])

    IS THIS SUPPORTED/USED ANYMORE???? return a list of options for a linked table

    This is highly dependant on naming columns 'correctly' :) using colname = xxxxx_yyyyyy xxxxxx = related table; (yyyyy = user defined..) looks up table xxxxx, for value id=$this->xxxxx stores it in $this->_xxxxx_yyyyy

    • Return: of results (empty array on failure)
    • Access: public

    Parameters:

       $row   — 
       $table   — 

    [ Top ]

    getLinks   [line 2466]

    boolean getLinks( [string $format = '_%s'])

    load related objects

    There are two ways to use this, one is to set up a <dbname>.links.ini file into a static property named <dbname>.links and specifies the table joins, the other highly dependent on naming columns 'correctly' :) using colname = xxxxx_yyyyyy xxxxxx = related table; (yyyyy = user defined..) looks up table xxxxx, for value id=$this->xxxxx stores it in $this->_xxxxx_yyyyy you can change what object vars the links are stored in by changeing the format parameter

    • Return: , true on success
    • Author: Tim White <tim@cyface.com>
    • Access: public

    Parameters:

    string   $format   —  format (default _%s) where %s is the table name.

    [ Top ]

    groupBy   [line 623]

    none|PEAR::Error groupBy( [string $group = false])

    Adds a group by condition

    $object->groupBy(); //reset the grouping $object->groupBy("ID DESC"); $object->groupBy("ID,age");

    • Return: - invalid args only
    • Access: public

    Parameters:

    string   $group   —  Grouping

    [ Top ]

    having   [line 658]

    none|PEAR::Error having( [string $having = false])

    Adds a having clause

    $object->having(); //reset the grouping $object->having("sum(value) > 0 ");

    • Return: - invalid args only
    • Access: public

    Parameters:

    string   $having   —  condition

    [ Top ]

    insert   [line 836]

    mixed insert( )

    Insert the current objects variables into the database

    Returns the ID of the inserted element (if auto increment or sequences are used.)

    for example

    Designed to be extended

    $object = new mytable(); $object->name = "fred"; echo $object->insert();

    • Return: false on failure, int when auto increment or sequence used, otherwise true on success
    • Access: public

    [ Top ]

    joinAdd   [line 2724]

    none joinAdd( [optional $obj = false], [optional $joinType = 'INNER'], [optional $joinAs = false], [optional $joinCol = false])

    joinAdd - adds another dataobject to this, building a joined query.

    example (requires links.ini to be set up correctly) // get all the images for product 24 $i = new DataObject_Image(); $pi = new DataObjects_Product_image(); $pi->product_id = 24; // set the product id to 24 $i->joinAdd($pi); // add the product_image connectoin $i->find(); while ($i->fetch()) { // do stuff } // an example with 2 joins // get all the images linked with products or productgroups $i = new DataObject_Image(); $pi = new DataObject_Product_image(); $pgi = new DataObject_Productgroup_image(); $i->joinAdd($pi); $i->joinAdd($pgi); $i->find(); while ($i->fetch()) { // do stuff }


    Parameters:

    optional   $obj   —  object |array the joining object (no value resets the join) If you use an array here it should be in the format: array('local_column','remotetable:remote_column'); if remotetable does not have a definition, you should use @ to hide the include error message..
    optional   $joinType   —  string 'LEFT'|'INNER'|'RIGHT'|'' Inner is default, '' indicates just select ... from a,b,c with no join and links are added as where items.
    optional   $joinAs   —  string if you want to select the table as anther name useful when you want to select multiple columsn from a secondary table.
    optional   $joinCol   —  string The column on This objects table to match (needed if this table links to the child object in multiple places eg. user->friend (is a link to another user) user->mother (is a link to another user..)

    [ Top ]

    limit   [line 699]

    none|PEAR::Error limit( [string $a = null], [string $b = null])

    Sets the Limit

    $boject->limit(); // clear limit $object->limit(12); $object->limit(12,10);

    Note this will emit an error on databases other than mysql/postgress as there is no 'clean way' to implement it. - you should consider refering to your database manual to decide how you want to implement it.

    • Return: - invalid args only
    • Access: public

    Parameters:

    string   $a   —  limit start (or number), or blank to reset
    string   $b   —  number

    [ Top ]

    links   [line 2423]

    array|null links( )

    Get the links associate array as defined by the links.ini file.

    Experimental... - Should look a bit like [local_col_name] => "related_tablename:related_col_name"

    • Return: array = if there are links defined for this table. empty array - if there is a links.ini file, but no links on this table null - if no links.ini exists for this database (hence try auto_links).
    • See: DB_DataObject::getLinks(), DB_DataObject::getLink()
    • Access: public

    [ Top ]

    orderBy   [line 588]

    none|PEAR::Error orderBy( [string $order = false])

    Adds a order by condition

    $object->orderBy(); //clears order by $object->orderBy("ID"); $object->orderBy("ID,age");

    • Return: - invalid args only
    • Access: public

    Parameters:

    string   $order   —  Order

    [ Top ]

    query   [line 1457]

    void query( string $string)

    sends raw query to database

    Since _query has to be a private 'non overwriteable method', this is a relay

    • Return: or DB_Error
    • Access: public

    Parameters:

    string   $string   —  SQL Query

    [ Top ]

    raiseError   [line 3569]

    error raiseError( int $message, [int $type = null], [int $behaviour = null])

    Default error handling is to create a pear error, but never return it.

    if you need to handle errors you should look at setting the PEAR_Error callback this is due to the fact it would wreck havoc on the internal methods!

    • Return: object
    • Access: public

    Parameters:

    int   $message   —  message
    int   $type   —  type
    int   $behaviour   —  behaviour (die or continue!);

    [ Top ]

    selectAdd   [line 742]

    mixed selectAdd( [string $k = null])

    Adds a select columns

    $object->selectAdd(); // resets select to nothing! $object->selectAdd("*"); // default select $object->selectAdd("unixtime(DATE) as udate"); $object->selectAdd("DATE");

    to prepend distict: $object->selectAdd('distinct ' . $object->selectAdd());

    • Return: null or old string if you reset it.
    • Access: public

    Parameters:

    string   $k   — 

    [ Top ]

    selectAs   [line 782]

    void selectAs( [array|object|null $from = null], [string $format = '%s'], [string $tableName = false])

    Adds multiple Columns or objects to select with formating.

    $object->selectAs(null); // adds "table.colnameA as colnameA,table.colnameB as colnameB,......" // note with null it will also clear the '*' default select $object->selectAs(array('a','b'),'%s_x'); // adds "a as a_x, b as b_x" $object->selectAs(array('a','b'),'ddd_%s','ccc'); // adds "ccc.a as ddd_a, ccc.b as ddd_b" $object->selectAdd($object,'prefix_%s'); // calls $object->get_table and adds it all as objectTableName.colnameA as prefix_colnameA

    • Access: public

    Parameters:

    array|object|null   $from   —  the array or object to take column names from.
    string   $format   —  format in sprintf format (use %s for the colname)
    string   $tableName   —  table name eg. if you have joinAdd'd or send $from as an array.

    [ Top ]

    setFrom   [line 2978]

    true setFrom( array &$from, [string $format = '%s'])

    Copies items that are in the table definitions from an array or object into the current object will not override key values.
    • Return: on success or array of key=>setValue error message
    • Access: public

    Parameters:

    string   $format   —  eg. map xxxx_name to $object->name using 'xxxx_%s' (defaults to %s - eg. name -> $object->name
    array   &$from   —  | object $from

    [ Top ]

    staticGet   [line 320]

    object &staticGet( string $class, string $k, [string $v = null])

    An autoloading, caching static get method using key, value (based on get)

    Usage: $object = DB_DataObject::staticGet("DbTable_mytable",12); or $object = DB_DataObject::staticGet("DbTable_mytable","name","fred");

    or write it into your extended class: function &staticGet($k,$v=NULL) { return DB_DataObject::staticGet("This_Class",$k,$v); }

    • Access: public

    Parameters:

    string   $class   —  class name
    string   $k   —  column (or value if using keys)
    string   $v   —  value (optional)

    [ Top ]

    table   [line 1733]

    array table( array 0)

    get/set an associative array of table columns
    • Return: (associative)
    • Access: public

    Parameters:

    array   0   —  key=>type array

    [ Top ]

    tableName   [line 1701]

    string tableName( string 0)

    Return or assign the name of the current table
    • Return: The name of the current table
    • Access: public

    Parameters:

    string   0   —  optinal table name to set

    [ Top ]

    toArray   [line 3059]

    array toArray( [string $format = '%s'])

    Returns an associative array from the current data (kind of oblivates the idea behind DataObjects, but is usefull if you use it with things like QuickForms.

    you can use the format to return things like user[key] by sending it $object->toArray('user[%s]')

    will also return links converted to arrays.

    • Return: of key => value for row
    • Access: public

    Parameters:

    string   $format   —  sprintf format for array

    [ Top ]

    toValue   [line 3422]

    true toValue( string $col, [format $format = null])

    standard get* implementation.

    with formaters.. supported formaters: date/time : %d/%m/%Y (eg. php strftime) or pear::Date numbers : %02d (eg. sprintf) NOTE you will get unexpected results with times like 0000-00-00 !!!

    • Return: Description
    • See: DB_DataObject::_call(), strftime(), Date::format()
    • Access: public

    Parameters:

    string   $col   —  column of database
    format   $format   —  foramt

    [ Top ]

    update   [line 1066]

    int update( [object dataobject $dataObject = false])

    Updates current objects variables into the database uses the keys() to decide how to update Returns the true on success

    for example

    $object = DB_DataObject::factory('mytable'); $object->get("ID",234); $object->email="testing@test.com"; if(!$object->update()) echo "UPDATE FAILED";

    to only update changed items : $dataobject->get(132); $original = $dataobject; // clone/copy it.. $dataobject->setFrom($_POST); if ($dataobject->validate()) { $dataobject->update($original); } // otherwise an error...

    performing global updates: $object = DB_DataObject::factory('mytable'); $object->status = "dead"; $object->whereAdd('age > 150'); $object->update(DB_DATAOBJECT_WHEREADD_ONLY);

    • Return: rows affected or false on failure
    • Access: public

    Parameters:

    object dataobject   $dataObject   —  (optional) | DB_DATAOBJECT_WHEREADD_ONLY - used to only update changed items.

    [ Top ]

    validate   [line 3105]

    array validate( )

    validate - override this to set up your validation rules

    validate the current objects values either just testing strings/numbers or using the user defined validate{Row name}() methods. will attempt to call $this->validate{column_name}() - expects true = ok false = ERROR you can the use the validate Class from your own methods.

    This should really be in a extenal class - eg. DB_DataObject_Validate.

    • Return: of validation results or true
    • Access: public

    [ Top ]

    whereAdd   [line 551]

    string|PEAR::Error whereAdd( [string $cond = false], [string $logic = 'AND'])

    Adds a condition to the WHERE statement, defaults to AND

    $object->whereAdd(); //reset or cleaer ewhwer $object->whereAdd("ID > 20"); $object->whereAdd("age > 20","OR");

    • Return: - previous condition or Error when invalid args found
    • Access: public

    Parameters:

    string   $cond   —  condition
    string   $logic   —  optional logic "OR" (defaults to "AND")

    [ Top ]

    _call   [line 3231]

    true? _call( $method, $params, &$return)

    Overload Extension support
    • enables setCOLNAME/getCOLNAME
    if you define a set/get method for the item it will be called.

    otherwise it will just return/set the value. NOTE this currently means that a few Names are NO-NO's eg. links,link,linksarray, from, Databaseconnection,databaseresult

    note

      • get is automatically called by toArray()
      setters return true on success. = strings on failure getters return the value!

      this fires off trigger_error - if any problems.. pear_error, has problems with 4.3.2RC2 here

      • See: overload
      • Access: public

      Parameters:

         $method   — 
         $params   — 
         &$return   — 

      [ Top ]

      _loadConfig   [line 3611]

      object an _loadConfig( )

      Define the global $_DB_DATAOBJECT['CONFIG'] as an alias to PEAR::getStaticProperty('DB_DataObject','options');

      After Profiling DB_DataObject, I discoved that the debug calls where taking considerable time (well 0.1 ms), so this should stop those calls happening. as all calls to debug are wrapped with direct variable queries rather than actually calling the funciton THIS STILL NEEDS FURTHER INVESTIGATION

      • Return: error object
      • Access: public

      [ Top ]


      Documentation generated on Mon, 11 Mar 2019 14:28:10 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.