Если есть минута, укажите мне на явные ошибки в исполнении, если они есть и что можно упростить или заменить. Вопрос касается именно стиля ООП.
Это модель "Товар". Создание, редактирование, удаление и вывод.
class Product{
protected $db;
private $table = 'products';
public function __construct($db){
$this->db = $db;
}
public function create(array $post){
if(empty($post['name']) || empty($post['price']) || empty($post['brand'])){
throw new AppException('Не заполнены все поля');
}
if($this->checkCopyName($post['name']) > 0){
throw new AppException('Данное название уже используется');
}
$query = "INSERT INTO `".$this->table."` (`name`, `price`, `brand`) VALUE (:name, :price, :brand)";
$stmt = $this->db->prepare($query);
$a = array(
':name' => trim($post['name']),
':price' => intval($post['price']),
':brand' => intval($post['brand'])
);
return $stmt->execute($a);
}
public function edit(array $post){
if(empty($post['id']) || empty($post['name']) || empty($post['price']) || empty($in['brand'])){
throw new AppException('Не заполнены все поля');
}
if($this->checkCopyName($post['name'], $post['id'])){
throw new AppException('Данное название уже используется');
}
$query = "UPDATE `".$this->table."` SET `name` = :name, `price` = :price, `brand` = :brand WHERE `id` = :id";
$stmt = $this->db->prepare($query);
$a = array(
':id' => intval($in['id']),
':name' => trim($in['name']),
':price' => intval($in['price']),
':brand' => intval($in['brand'])
);
return $stmt->execute($a);
}
public function delete($id){
$query = "DELETE FROM `".$this->table."` WHERE `id` = ?";
$stmt = $this->db->prepare($query);
return $stmt->execute(array(intval($id)));
}
private function checkCopyName($name, $id = null){
$query = "SELECT COUNT(*) FROM `".$this->table."` WHERE `name` = ?";
if(!empty($id)){
$query .= " AND `id` != '".intval($id)."'";
}
$stmt = $this->db->prepare($query);
$stmt->execute(array($name));
$cnt = $stmt->fetchColumn();
$stmt->closeCursor();
return $cnt;
}
private function select(array $param){
$where = array();
$placeholder = array();
$query = "SELECT * FROM `".$this->table."`";
if(!empty($param['brand'])){
$where[] = "`brand` = :brand";
$placeholder[':brand'] = intval($param['brand']);
}
if(!empty($param['id'])){
$where[] = "`id` = :id";
$placeholder[':id'] = intval($param['id']);
}
if(count($where) > 0){
$query .= " WHERE ".implode(" AND ", $where);
}
$stmt = $this->db->prepare($query);
$stmt->execute($placeholder);
$rows = $stmt->fetchAll();
$stmt->closeCursor();
return $rows;
}
public function selectAll(){
return $this->select(array());
}
public function selectByID($id){
return $this->select(array('id' => $id));
}
public function selectBrand($id){
return $this->select(array('brand' => $id));
}
}