Question

Supposons l'association suivante entre trois tables dans une base de données:

    //working with three tables a client 'has one' business
    //and a business has many business hours.

Ce qui suit nous donnerait un tableau d'objets ActiveRecord:

$this->client->business->businesshours

Et il faudrait tirer un objet Formulaire Le tableau pour obtenir sa valeur de colonne:

$this->client->business->businesshours[0]->start_time

Depuis que je suis nouveau dans PHP ActiveRecord, Quelles sont les moyens de procéder à des informations / trie / utilisent des informations à partir d'un tableau d'objets autres que de boucler avec une boucle foreach ()? Y a-t-il des méthodes pour trier le tableau d'objets, extraire des informations basées sur une valeur de colonne, les meilleures pratiques?

Était-ce utile?

La solution

Il n'y a pas de pratique spécifique à la bibliothèque pour trier ou tirer certains businesshour objets hors du tableau de résultat. Si vous souhaitez manipuler le tableau retourné des objets, vous devez utiliser des fonctions de tableau PHP standard comme array_map sur le tableau résultat.

Si vous connaissez l'ordre de tri ou les conditions que vous souhaitez pour les objets retournés dans le tableau de résultat, vous devez plutôt les spécifier dans votre déclaration d'association afin que vous ne renvoyez pas les objets dont vous ne voulez pas ou dont vous n'avez pas besoin.

Étant donné que vous n'avez publié aucun code, vous n'aurez qu'à extrapoler dans votre propre situation à partir de cet exemple:

static $has_many = array(
  array(
    'businesshours',
    'conditions' => array('hour BETWEEN ? AND ?' => array(9, 17)),
    'order' => 'hour ASC'
  )
);

Cette déclaration d'association ne renverra que businesshour objets entre 9 et 17 et le faire par ordre croissant. Donc, comme vous pouvez le voir, si vous contraignez vos associations avec uniquement les enregistrements dont vous avez besoin, il ne sera pas nécessaire de trier ou d'analyser le tableau de résultat une fois reçu.

Parfois, il est utile d'utiliser array_map Pour obtenir uniquement certains objets de votre tableau de résultat:

// get $result array
$new = array_map(function($obj) { if ($obj->hour > 9){ return $obj; } }, $result);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top