Или так
<?php
namespace App\Model;
use ВашПакет\Product;
class ProductDecorator
{
protected $decorated;
public function __construct(Product $product) {
$this->decorated = $product;
}
public function __call($method, $args) { return call_user_func_array([ $this->decorated, $method ], $args); }
public function __callStatic($method, $args) { return call_user_func_array([ static::class, $method ], $args); }
public function newMethod(): void
{
echo "Hello World!";
}
}
В первом случае модель на автомате получит другую таблицу (она из имени класса делается), придется ставить protected $table = 'table_name'; а как захочешь добавить префикс в БД идти искать где префиксы вписывать ибо имена статикой. А добавишь в конфиг базы префикс - придется использовать модели в миграциях, а там в основном строки.
Во втором случае некоторые методы могут не работать из-за того что возвращают void например.
Так что:
<?php
class ProductService
{
public function doSome(Product $product) : Product
{
$product->updated_at = new \DateTime('now');
return $product;
}
}