PHP interesse |
|
Ik zet met 2 vragen betreft de db_select van zend.
Ik ben momenteel bezig met een staffpagina voor een clanwebsite. Daarbij heb ik twee databases (teams & players).
Ik haal met mijn staffmodel de teams & spelers op. Echter doe ik dit denk ik op een vrij omslachtige manier. Ik zit namelijk met het probleem dat ik bij mijn databaseoutput van de teams ook de spelers in de gereturnde array wil hebben. Het zijn dus twee selects in een eigenlijk. Om het even duidelijk te maken heb ik mijn code in mijn model hieronder:
/**
* Fetch all the teams
* @param array optional parameters to define which teams should be fetched
* @return array
*/
public function getTeams( $params = array() )
{
$select = $this->db->select();
$select->from( $this->_name )
->order( $this->_name . '.name ASC' );
foreach( $params as $param => $value )
{
switch( $param )
{
case 'id':
$select->where( 'id = ?', $value );
break;
case 'values':
//if( is_array( $value ) ) $select->from( $this->_name, $value );
break;
case 'limit':
$select->limit( $value, 0 );
break;
}
}
$result = $this->db->fetchAll( $select );
$output = array();
foreach( $result as $param => $value )
{
$return = array();
foreach( $value as $param => $content )
{
$return[ $param ] = $content;
}
$return[ 'players' ] = $this->getPlayers( array( 'team_id' => $return[ 'id' ] ) );
$output[] = $return;
}
return $output;
}
/**
* Fetch all the players
* @param array optional parameters to define which players should be fetched
* @return array
*/
public function getPlayers( $params = array() )
{
$select = $this->db->select();
$select->from( $this->_players )
->order( $this->_players . '.name ASC' );
foreach( $params as $param => $value )
{
switch( $param )
{
case 'team_id':
$select->where( 'team_id = ?', $value );
break;
case 'values':
//if( is_array( $value ) ) $select->from( $this->_name, $value );
break;
case 'limit':
$select->limit( $value, 0 );
break;
}
}
return $this->db->fetchAll( $select );
}
/** * Fetch all the teams * @param array optional parameters to define which teams should be fetched * @return array */ public function getTeams ( $params = array() ) { $select = $this->db->select(); $select->from( $this->_name ) ->order( $this->_name . '.name ASC' ); foreach( $params as $param => $value ) { switch( $param ) { case 'id': $select->where( 'id = ?', $value ); break; case 'values': //if( is_array( $value ) ) $select->from( $this->_name, $value ); break; case 'limit': $select->limit( $value, 0 ); break; } } $result = $this->db->fetchAll( $select ); foreach( $result as $param => $value ) { foreach( $value as $param => $content ) { $return[ $param ] = $content; } $return[ 'players' ] = $this->getPlayers( array( 'team_id' => $return[ 'id' ] ) ); $output[] = $return; } return $output; } /** * Fetch all the players * @param array optional parameters to define which players should be fetched * @return array */ public function getPlayers ( $params = array() ) { $select = $this->db->select(); $select->from( $this->_players ) ->order( $this->_players . '.name ASC' ); foreach( $params as $param => $value ) { switch( $param ) { case 'team_id': $select->where( 'team_id = ?', $value ); break; case 'values': //if( is_array( $value ) ) $select->from( $this->_name, $value ); break; case 'limit': $select->limit( $value, 0 ); break; } } return $this->db->fetchAll( $select ); }
zoals je ziet lees in de teams output eerst door en voeg ik daar een arrayitem met players aantoen. Dit zou toch sneller moeten ???
Mijn tweedde punt is dat ik ook via mijn $params (array) kan opgeven welke values ik uit mijn tabel wil halen. Echter als ik de regel $select->from( $this->_name ) daarna nog een keer defineer geeft het problemen... weet iemand hier een oplossing voor.
bvd. Rob
|