@dk-web

Как управлять свойствами в экземпляре объекта PDO PDP?

Пробовал использовать сеттеры, но поскольку жесткий newbie в ООП, то попал впросак...

class handler {
... SELECT * FROM
return $stmt->fetchAll(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'person');
//return $stmt->fetchAll(PDO::FETCH_INTO, 'person');
}


class person  {
	public $surname;
	public $id;
	public $country;
  public $status;

  function __construct($surname", $id, $country", $display) {
			$this->surname=$surname;
      $this->id=$id;
      $this->country=$country;
      $this->status=$display;
	}  


}


Как можно используя SELECT * создать массив объектов именно с определенным набором свойств?...
в таблице 20 полей, мне нужно определить 4..

раньше я просто выбирал ключи полей, задавал в одном месте массив $allowed - и далее if (in_array) ну и т.д.
Как это можно реализовать в ООП варианте?

пробовал различные варианты с __set, но не срослось, да и не шибко хвалят...
если колхоз, то не пинайте сильно - просто подскажите...-)

UPD:
в handler
public $params = array('surname','id','country','display' );
...
 return $stmt->fetchAll(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'person',array($this->params));

в person
class person  {
	
  public $status;
  
  function __construct() {
    
  }  
}

Добавлять - да, добавляет - но никак не отфильтровать.... если добавлять PROPS LATE, то конструктор должен вызываться до назначения свойств... я уже чего в него только не прописывал(
Как было 20 полей так и осталось.....
  • Вопрос задан
  • 186 просмотров
Пригласить эксперта
Ответы на вопрос 1
@matperez
Судя по документации все уже сделано за вас:

PDO::FETCH_CLASS: Будет создан и возвращен новый объект указанного класса. Свойствам объекта будут присвоены значения столбцов, имена которых совпадут с именами свойств.


<?php
class fruit {
    public $name;
    public $colour;
}

$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();

$result = $sth->fetchAll(PDO::FETCH_CLASS, "fruit");
var_dump($result);
?>


Если же вы хотите задавать значения именно через конструктор, тогда это будет выглядеть как-то так:
$obj = $statement->fetchALL(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, 'Songs', $params);
public function __construct($params)
{
    $this->artist = $params[0]['artist'];
    $this->title= $params[0]['title'];
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы