Ho una domanda di progettazione per lavorare con i database in PHP orientato agli oggetti.
Ho una tabella nel mio database chiamata products
. Quindi ho 2 classi per questa tabella nel mio progetto PHP. ProductsRepository.php
e Product.php
.
ProductsRepository.php
attualmente assomiglia a questo
class ProductsRepository
{
private $db;
public function __construct(DB $db)
{
$this->db = $db;
}
public function getById($id)
{
$data = $this->db->GetProductByID($id);
$product = new Product(
$data['id'],
$data['category'],
$data['title'],
$data['description'],
);
return $product;
}
public function getAll()
{
$products = array();
$data = $this->db->GetAllProducts();
foreach ($data as $productData){
$product = new Product(
$productData['id'],
$productData['category'],
$productData['title'],
$productData['description'],
);
$products[] = $product;
}
return $products;
}
}
La mia domanda è come dovrei creare un metodo "createProduct". Innanzitutto, quale classe dovrebbe essere? Voglio che il metodo restituisca un'istanza del nuovo prodotto. Il problema principale che ho con questo è come dovrei gestire il id
del nuovo prodotto poiché verrà dato il prossimo id
disponibile dal database.
Alcune opzioni a cui ho pensato:
Hai createProduct
in ProductsRepository
e lascialo prendere un prodotto con id
impostato su -1 come argomento
public function createProduct(Product $product)
{
$product['id'] = $this->db->insertANewProduct($product); //returns the id
}
Hai createProduct
in Product
Questo dovrebbe essere il costruttore per la classe Product
?
public function createProduct($db, $data)
{
$this->$data = $data; //includes all info of the new product except the id
$this->$data['id'] = $db->insertANewProduct($data); //returns the id
}