Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PDO - FETCH_CLASS - pass results to constructor as parameters

Tags:

php

pdo

Is there any way, to pass results of PDO as parameters of the constructor? Let's say, I have the following class:

class Test
{
    private $value1;
    private $value2;
    function __construct($val1, $val2)
    {
        $this->value1 = $val1; $this->value2 = $val2;
    }
}

Then, via PDO driver I select some data from DB, let's say:

SELECT price, quantity FROM stock

$results = $query->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, "Test");

Right now, PDO passess these values directly to the class fields, and bypassing the constructor.

Maybe I am missing something, but I want to pass results from the query to the constructor. Constructor cannot be query-dependent, I want to be able to instantiate this class even without using PDO.

like image 873
mcmajkel Avatar asked Sep 11 '12 10:09

mcmajkel


1 Answers

The only way I figured out was using FETCH_FUNC constant and providing a function to create the object through the constructor.

function rowMapper( $price, $quantity)
{
  return new Test( $price, $quantity);
}
$results = $query->fetchAll( PDO::FETCH_FUNC, "rowMapper");

Now your objects will only be created using your constructor, instead of having PDO injecting values in private data and breaking the encapsulation.

like image 60
Márcio Belo Avatar answered Oct 09 '22 02:10

Márcio Belo