public function obi__organism::query
3.x obi__organism.inc | public obi__organism::query($query, $condition) |
Overrides ChadoField::query
See also
File
- tripal_chado/
includes/ TripalFields/ obi__organism/ obi__organism.inc, line 283
Class
Code
public function query($query, $condition) {
$alias = $this->field['field_name'];
$operator = $condition['operator'];
$field_term_id = $this->getFieldTermID();
$genus_term = $field_term_id . ',' . chado_get_semweb_term('organism', 'genus');
$species_term = $field_term_id . ',' . chado_get_semweb_term('organism', 'species');
$infraspecific_name_term = $field_term_id . ',' . chado_get_semweb_term('organism', 'infraspecific_name');
$infraspecific_type_term = $field_term_id . ',' . chado_get_semweb_term('organism', 'type_id');
// Join to the organism table for this field.
$this->queryJoinOnce($query, 'organism', $alias, "base.organism_id = $alias.organism_id");
// If the column is the field name then we're during a search on the full
// scientific name.
if ($condition['column'] == $field_term_id or
$condition['column'] == $field_term_id . ',rdfs:label') {
if (chado_get_version() <= 1.3) {
$query->where("CONCAT($alias.genus, ' ', $alias.species) $operator :full_name", array(':full_name' => $condition['value']));
}
else {
$this->queryJoinOnce($query, 'cvterm', $alias . '_cvterm', 'base.infraspecific_type = ' . $alias . '_cvterm.type_id', 'LEFT OUTER');
$query->where("CONCAT($alias.genus, ' ', $alias.species, ' ', " . $alias . "'_cvterm.name', ' ', $alias.infraspecific_name) $operator :full_name", array(':full_name' => $condition['value']));
}
}
// If the column is a subfield.
if ($condition['column'] == $species_term) {
$query->condition("$alias.species", $condition['value'], $operator);
}
if ($condition['column'] == $genus_term) {
$query->condition("$alias.genus", $condition['value'], $operator);
}
if ($condition['column'] == $infraspecific_name_term) {
$query->condition("$alias.infraspecific_name", $condition['value'], $operator);
}
if ($condition['column'] == $infraspecific_type_term) {
$this->queryJoinOnce($query, 'cvterm', 'CVT', "base.type_id = CVT.cvterm_id");
$query->condition("CVT.name", $condition['value'], $operator);
}
}