Database results as objects or arrays?
Question by Jonathan
This question is similar to Mysql results in PHP – arrays or objects? However, my question expands on what has been discussed there.
I’m trying to decide which format is better for working with database results: objects or arrays. I’m not concerned about performance (from what I understand it makes little difference). My focus is also more on displaying the results—not creating, updating or deleting them.
To date I’ve always used objects, via functions like mysqli_fetch_object
or PDO’s fetchObject
. This normally works nice, until I start doing joins. Joins lead to strange objects that are a blend of fields from two or more tables. My code quickly starts getting confusing.
I should note, I’m assigning specific class names, and not sticking with the default stdClass
. I do this so that I can access any helper methods I’ve created in my classes. For example:
foreach ($members as $member)
{
echo $member->full_name();
echo $member->age();
}
For the sake of clarity, I’m considering moving to arrays for all my database results. From what I’ve read others do this as well. However, this leaves me with no easy way to access my helper methods.
Using the above example, I guess I could just output both the first and last name instead of using the full_name()
method, not a big deal. As for the age() method, I guess I could create a generic utility class and put it in there.
My questions:
- If you use (model) objects, how do you deal with joins?
- If you use arrays, how do you deal with helper methods?
Answer by Starx
I think its better to represent all of your datas and its type in form of Model. For both joined and singular objects. Doing so will always omit your problem.
class Member_Details {
public $id;
public $first_name;
public $last_name;
public function FullName() {
return $this -> first_name." ".$this -> last_name;
}
}
class Member_Address {
public $id;
public $address;
public $city;
}
class MemberJoins {
public $objects = array();
}
After creating such classes you can configures a JOIN in the following way.
$obj_details = new Member_Details();
$obj_address = new Member_Address();
//Add data to the objects and then
//Then create the join object
$obj_address_details = new MemberJoins();
$obj_address_details -> objects = array($obj_details, $obj_address);
These both have a common property id
from which its data can be linked.