function chado_get_record_with_property

2.x tripal_core.chado_general.api.inc chado_get_record_with_property($record, $property, $options = array())
3.x tripal_chado.property.api.inc chado_get_record_with_property($record, $property, $options = array())

Get all records in the base table assigned one or more properties.

The property or properties of interest are specified using the $property argument.

Parameters

$record: An associative array used to identify the table and subset of records to to be searched: -table: The base table for which the property should be updated. Thus to update a property for a feature the base_table=feature. -base_records: An array in the format accepted by the chado_select_record for specifying a subset of records in the base table.

$property: An associative array used to specify the property to be selected for. It can contain the following keys. The keys must be specified to uniquely identify the term to be searched. If the options identify more than one CV term then an error will occur. -type_name: The cvterm name to be selected. -type_id: The cvterm_id of the term to be selected. -cv_id: The cv_id of the CV that contains the term. -cv_name: The name of the CV that contains the term. -value: The specific value for the property. -rank: The specific rank for the property. -cvalue_id: The cvterm_id of the value for the property. **note** cvalue_id is an anticipated column in the the next Chado release (1.4). It is included here for early adopters.

$options: An array of options supported by chado_generate_var(). These keys are used for generating the cvterm objects returned by this function.

Return value

An array of chado variables with the given property.

Related topics

7 calls to chado_get_record_with_property()
chado_get_analysis in tripal_chado/api/modules/tripal_chado.analysis.api.inc
Retrieves a chado analysis variable.
chado_get_cvterm in tripal_chado/api/modules/tripal_chado.cv.api.inc
Retrieves a chado controlled vocabulary term variable.
chado_get_dbxref in tripal_chado/api/modules/tripal_chado.db.api.inc
Retrieves a chado database reference variable.
chado_get_multiple_stocks in tripal_chado/api/modules/tripal_chado.stock.api.inc
Retrieves a chado stock variable.
chado_get_organism in tripal_chado/api/modules/tripal_chado.organism.api.inc
Retrieves a chado organism variable.

... See full list

File

tripal_chado/api/tripal_chado.property.api.inc, line 565
Provides an application programming interface (API) to manage data withing the Chado database.

Code

function chado_get_record_with_property($record, $property, $options = array()) {

  $base_table = array_key_exists('table', $record) ? $record['table'] : '';
  $base_records = array_key_exists('base_records', $record) ? $record['base_records'] : array();

  $type_name = array_key_exists('type_name', $property) ? $property['type_name'] : '';
  $type_id = array_key_exists('type_id', $property) ? $property['type_id'] : '';
  $cv_name = array_key_exists('cv_name', $property) ? $property['cv_name'] : '';
  $cv_id = array_key_exists('cv_id', $property) ? $property['cv_id'] : '';
  $value = array_key_exists('value', $property) ? $property['value'] : '';
  $rank = array_key_exists('rank', $property) ? $property['rank'] : '';

  $property_table = $base_table . 'prop';
  $foreignkey_name = $base_table . '_id';

  // Build the values array for checking if the CVterm exists and for
  // inserting the term as a property.
  $type = array();
  if ($cv_id) {
    $type['cv_id'] = $cv_id;
  }
  if ($cv_name) {
    $type['cv_id'] = array(
      'name' => $cv_name,
    );
  }
  if ($type_name) {
    $type['name'] = $type_name;
  }
  if ($type_id) {
    $type['cvterm_id'] = $type_id;
  }

  // Make sure the CV term exists;
  $term = chado_select_record('cvterm', array('cvterm_id'), $type);
  if (!$term or count($term) == 0) {
    tripal_report_error('tripal_chado', TRIPAL_ERROR, "chado_update_property: " .
      "Cannot find the term described by: %property.", 
    array('%property' => print_r($property, TRUE)));
    return FALSE;
  }
  if (count($term) > 1) {
    tripal_report_error('tripal_chado', TRIPAL_ERROR, "chado_update_property: " .
      "Multiple terms found. Cannot add the property. Property was described " .
      "by: %property.", 
    array('%property' => print_r($property, TRUE)));
    return FALSE;
  }

  // Build the array for identifying the property.
  $values = array();
  $values['type_id'] = $type;
  if ($rank) {
    $values['rank'] = $rank;
  }
  if ($value) {
    $values['value'] = $value;
  }

  // Add the base records details to the values array.
  if (!empty($base_records)) {
    $values[$foreignkey_name] = $base_records;
  }

  // Now select the ids of the base table that have the properties we want that 
  // match.
  $select = chado_select_record($property_table, array($foreignkey_name), $values);

  // For each of these ids, pull out the full base records.
  $records = array();
  foreach ($select as $s) {
    $id = $s->{$foreignkey_name};
    $values = array($foreignkey_name => $id);
    $records[$id] = chado_generate_var($base_table, $values, $options);
  }

  return $records;
}