Reputation: 120
I have two methods which are 90% identical, ie 90% repetitive code. I am trying to extend the 2nd method.
First Method:
public function getResultsByID($userID = null){
$sqlParams = array();
if (!$userID)
{
throw new Exception("No User ID Provided");
}
$sqlParams['userID'] = $userID;
$sql = "SELECT t.user_id,
t.owner_id,
t.store_id
FROM users t
LEFT JOIN store s
ON s.store_id = t.store_id
WHERE t.user_id = :userID";
$db = $this->dbWrite : $this->dbRead;
$results = $db->getRow($sql, $sqlParams);
return $results;
}
My Second method is pretty identical except that I am joining multiple tables into this.
public function getMoreResultsByID($userID = null){
$sqlParams = array();
if (!$userID)
{
throw new Exception("No User ID Provided");
}
$sqlParams['userID'] = $userID;
$sql = "SELECT t.user_id,
t.owner_id,
t.store_id
FROM users t
LEFT JOIN store s ON s.store_id = t.store_id
LEFT JOIN owner_contact oc ON oc.owner_id = t.owner_id
LEFT JOIN owner_detail od ON od.owner_id = t.owner_id
WHERE t.user_id = :userID";
$db = $this->dbWrite : $this->dbRead;
$results = $db->getRow($sql, $sqlParams);
return $results;
}
I am unable to figure out how to extend my getMoreResultsByID() from getResultsByID() so that I can get rid of identical code
Thanks in advance
Upvotes: 1
Views: 98
Reputation: 673
You can pass two parameters two the function getResultsById
<?php
public function getMoreResultsByID($userID = null, join = TRUE){
$sqlParams = array();
if (!$userID)
{
throw new Exception("No User ID Provided");
}
$sqlParams['userID'] = $userID;
$sql = "SELECT t.user_id,
t.owner_id,
t.store_id
FROM users t";
if (join){
$sql.="LEFT JOIN store s ON s.store_id = t.store_id
LEFT JOIN owner_contact oc ON oc.owner_id = t.owner_id
LEFT JOIN owner_detail od ON od.owner_id = t.owner_id";
}else{
$sql.="LEFT JOIN store s
ON s.store_id = t.store_id";
}
$sql.="WHERE t.user_id = :userID";
$db = $this->dbWrite : $this->dbRead;
$results = $db->getRow($sql, $sqlParams);
return $results;
}
Upvotes: 0
Reputation: 836
You dont need to add two function to do same work all you need to do is pass parameter to function
public function getResultsByID($userID = null,$flag){
$sqlParams = array();
if (!$userID)
{
throw new Exception("No User ID Provided");
}
$sqlParams['userID'] = $userID;
if($flag=value1){
$sql = "SELECT t.user_id,t.owner_id,t.store_id
FROM users t
LEFT JOIN store s
ON s.store_id = t.store_id
WHERE t.user_id = :userID";
}elseif($flag=value2){
$sql = "SELECT t.user_id,
t.owner_id,
t.store_id
FROM users t
LEFT JOIN store s ON s.store_id = t.store_id
LEFT JOIN owner_contact oc ON oc.owner_id = t.owner_id
LEFT JOIN owner_detail od ON od.owner_id = t.owner_id
WHERE t.user_id = :userID";
}
$db = $this->dbWrite : $this->dbRead;
$results = $db->getRow($sql, $sqlParams);
return $results;
}
Upvotes: 2
Reputation: 1545
You could create another private method where you pass SQL query and userId as parameters like this.
<?php
private function queryResults($sql, $userID = null){
$sqlParams = array();
if (!$userID)
{
throw new Exception("No User ID Provided");
}
$sqlParams['userID'] = $userID;
$db = $this->dbWrite : $this->dbRead;
$results = $db->getRow($sql, $sqlParams);
return $results;
}
?>
Then, you can use your methods like this.
<?php
public function getResultsByID($userID = null){
$sql = "SELECT t.user_id,
t.owner_id,
t.store_id
FROM users t
LEFT JOIN store s
ON s.store_id = t.store_id
WHERE t.user_id = :userID";
return $this->queryResults($sql, $userID);
}
Similarly, the other one.
You can also modify your queryResults()
method further, to serve other methods in your class.
Upvotes: 5