PHP ActiveCord Array di oggetti, cosa successiva?
-
13-11-2019 - |
Domanda
Supponiamo che la seguente associazione tra tre tabelle in un database:
//working with three tables a client 'has one' business
//and a business has many business hours.
Quanto segue ci darebbe un Array di oggetti ActiveCord:
$this->client->business->businesshours
E dovremmo tirare un oggetto in forma l'array per ottenere il valore della colonna:
$this->client->business->businesshours[0]->start_time
Da quando sono nuovo a PHP ActiveCord, Quali sono alcuni modi per procedere a tirare/ordinare/utilizzare le informazioni da una serie di oggetti diversi dal loop con un ciclo foreach ()? Ci sono metodi per ordinare attraverso il Array di oggetti, Pull informazioni in base a un valore della colonna, alle migliori pratiche?
Soluzione
Non esiste una pratica specifica per la libreria per l'ordinamento o il tiro certo businesshour
oggetti fuori dall'array di risultati. Se si desidera manipolare l'array di oggetti restituiti, è necessario utilizzare funzioni di array PHP standard come array_map
Sull'array di risultati.
Se conosci l'ordine di ordinamento o le condizioni desiderate per gli oggetti restituiti nell'array dei risultati, dovresti invece specificarli nella dichiarazione di associazione in modo da non restituire oggetti che non desideri o di cui hai bisogno.
Dato che non hai pubblicato alcun codice dovrai solo estrapolare la tua situazione da questo esempio:
static $has_many = array(
array(
'businesshours',
'conditions' => array('hour BETWEEN ? AND ?' => array(9, 17)),
'order' => 'hour ASC'
)
);
Questa dichiarazione di associazione restituirà solo il businesshour
oggetti tra 9 e 17 e lo fanno in ordine crescente. Come puoi vedere, se limiti le tue associazioni solo ai record di cui hai bisogno, non sarà necessario ordinare o analizzare l'array di risultati una volta ricevuto.
A volte è utile da usare array_map
Per ottenere solo determinati oggetti dall'array di risultati:
// get $result array
$new = array_map(function($obj) { if ($obj->hour > 9){ return $obj; } }, $result);