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?

È stato utile?

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top