Files
cake-products/src/Model/Table/ProductsTable.php
T

146 lines
4.3 KiB
PHP
Raw Normal View History

<?php
declare(strict_types=1);
namespace CakeProducts\Model\Table;
use Cake\Core\Configure;
use Cake\Database\Type\EnumType;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;
use CakeProducts\Model\Enum\ProductProductTypeId;
/**
* Products Model
*
2026-08-22 02:47:36 -07:00
* @property ProductCategoriesTable&\Cake\ORM\Association\BelongsTo $ProductCategories
*
* @method \CakeProducts\Model\Entity\Product newEmptyEntity()
* @method \CakeProducts\Model\Entity\Product newEntity()
2026-08-22 02:47:36 -07:00
* @method array<\CakeProducts\Model\Entity\Product> newEntities(array $data, array $options = [])
* @method \CakeProducts\Model\Entity\Product get()
* @method \CakeProducts\Model\Entity\Product findOrCreate()
* @method \CakeProducts\Model\Entity\Product patchEntity()
2026-08-22 02:47:36 -07:00
* @method array<\CakeProducts\Model\Entity\Product> patchEntities(iterable $entities, array $data, array $options = [])
* @method \CakeProducts\Model\Entity\Product|false save(\CakeProducts\Model\Entity\Product|\Cake\Datasource\EntityInterface $entity, array $options = [])
* @method \CakeProducts\Model\Entity\Product saveOrFail()
*/
class ProductsTable extends Table {
/**
* Initialize method
*
* @param array<string, mixed> $config The configuration for the Table.
* @return void
*/
public function initialize(array $config): void {
parent::initialize($config);
$this->setTable('products');
$this->setDisplayField('name');
$this->setPrimaryKey('id');
$this->setEntityClass(
Configure::read('CakeProducts.Products.entity', 'CakeProducts\Model\Entity\Product'),
);
$this->belongsTo('ProductCategories', [
'foreignKey' => 'product_category_id',
'bindingKey' => 'internal_id',
'joinType' => 'INNER',
'className' => 'CakeProducts.ProductCategories',
]);
$this->hasMany('ProductAttributes', [
'className' => 'CakeProducts.ProductAttributes',
'dependent' => true,
'cascadeCallbacks' => true,
]);
2025-07-05 20:08:56 -07:00
$this->hasMany('ProductVariants', [
'foreignKey' => 'product_id',
'className' => 'CakeProducts.ProductVariants',
'dependent' => true,
'cascadeCallbacks' => true,
]);
2025-07-05 20:08:56 -07:00
$this->hasMany('ProductSkus', [
'foreignKey' => 'product_id',
'className' => 'CakeProducts.ProductSkus',
'dependent' => true,
'cascadeCallbacks' => true,
]);
$this->hasMany('ProductPhotos', [
'foreignKey' => 'product_id',
'className' => 'CakeProducts.ProductPhotos',
'dependent' => true,
'cascadeCallbacks' => true,
]);
2025-09-29 23:40:16 -07:00
$this->hasOne('PrimaryProductPhotos', [
'foreignKey' => 'product_id',
'conditions' => ['PrimaryProductPhotos.primary_photo' => true],
'className' => 'CakeProducts.ProductPhotos',
'dependent' => true,
]);
2025-09-29 23:40:16 -07:00
$this->hasOne('DefaultProductSkus', [
'foreignKey' => 'product_id',
'conditions' => ['DefaultProductSkus.default_sku' => true],
'className' => 'CakeProducts.ProductSkus',
'propertyName' => 'default_product_sku',
'dependent' => true,
]);
2025-10-06 23:21:50 -07:00
$this->getSchema()->setColumnType('product_type_id', EnumType::from(ProductProductTypeId::class));
$this->addBehavior('Muffin/Trash.Trash');
}
/**
* Default validation rules.
*
* @param \Cake\Validation\Validator $validator Validator instance.
* @return \Cake\Validation\Validator
*/
public function validationDefault(Validator $validator): Validator {
$validator
->scalar('name')
->maxLength('name', 255)
->requirePresence('name', 'create')
->notEmptyString('name');
$validator
->uuid('product_category_id')
->notEmptyString('product_category_id');
$validator
->integer('product_type_id')
->requirePresence('product_type_id', 'create')
->notEmptyString('product_type_id');
$validator
->dateTime('deleted')
->allowEmptyDateTime('deleted');
return $validator;
}
/**
* Returns a rules checker object that will be used for validating
* application integrity.
*
* @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
* @return \Cake\ORM\RulesChecker
*/
public function buildRules(RulesChecker $rules): RulesChecker {
$rules->add($rules->isUnique(['product_category_id', 'name']), ['errorField' => 'product_category_id']);
$rules->add($rules->existsIn(['product_category_id'], 'ProductCategories'), ['errorField' => 'product_category_id']);
2025-04-05 02:06:23 -07:00
// $rules->add($rules->validCount('product_attributes', 0, '<=', 'You must not have any tags'));
return $rules;
}
}