Warning: You are browsing the documentation for PrestaShop 1.7, which is outdated.
You might want to read an updated version of this page for the current version, PrestaShop 8. Read the updated version of this page
When needing to dive deep, you have to use the ObjectModel class. This is the main object of PrestaShop’s object model. It can be overridden… with precaution.
It is an Active Record kind of class (see: Active record pattern). The table attributes or view attributes of PrestaShop’s database are encapsulated in this class. Therefore, the class is tied to a database record. After the object has been instantiated, a new record is added to the database. Each object retrieves its data from the database; when an object is updated, the record to which it is tied is updated as well. The class implements accessors for each attribute.
You must use the $definition
static variable in order to define the model.
For instance:
/**
* Example from the CMS model (CMSCore)
*/
public static $definition = [
'table' => 'cms',
'primary' => 'id_cms',
'multilang' => true,
'fields' => array(
'id_cms_category' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'],
'position' => ['type' => self::TYPE_INT],
'active' => ['type' => self::TYPE_BOOL],
// Language fields
'meta_description' => [
'type' => self::TYPE_STRING,
'lang' => true,
'validate' => 'isGenericName',
'size' => 255
],
'meta_keywords' => [
'type' => self::TYPE_STRING,
'lang' => true,
'validate' => 'isGenericName',
'size' => 255
],
'meta_title' => [
'type' => self::TYPE_STRING,
'lang' => true,
'validate' => 'isGenericName',
'required' => true,
'size' => 128
],
'link_rewrite' => [
'type' => self::TYPE_STRING,
'lang' => true,
'validate' => 'isLinkRewrite',
'required' => true,
'size' => 128
],
'content' => [
'type' => self::TYPE_HTML,
'lang' => true,
'validate' => 'isString',
'size' => 3999999999999
],
)
];
In order to retrieve an object in many languages:
'multilang' => true
In order to retrieve an object depending on the current store:
'multishop' => true
In order to retrieve an object which depends on the current store, and in many languages:
'multilang_shop' => true
Thanks to the hooks, you can alter the Object Model or execute functions during the lifecycle of your models. Every hook receive an instance of the manipulated object model:
As an example, this is how you can retrieve information about a product when we delete it from the database:
use Product;
// In a module
public function hookActionObjectProductDeleteAfter(Product $product)
{
PrestaShopLogger::addLog(
sprintf('Product with id %s was deleted with success', $product->id_product)
);
}