protected function query_contrib($query, $is_root) { parent::query_contrib($query, $is_root); // Entities and aliases : $trg_entity = $this->trg_entity(); $trg_alias = $this->trg_set->name(); // From : $trg_entity->query_from($query, $trg_alias); // Restrict result with where conditions (in WHERE clause !!!) : foreach ($this->where as $w) { $trg_entity->query_where($query, $trg_alias, $w['field'], $w['op'], $w['expr']); } }
protected function query_contrib($query, $is_root) { parent::query_contrib($query, $is_root); // Entities and aliases : $src_entity = $this->src_entity(); $trg_entity = $this->trg_entity(); $src_alias = $this->src_set->name(); $trg_alias = $this->trg_set->name(); // Root ? Must base query on src set : if ($is_root) { $pk = $src_entity->pk(); $src_entity->query_select($query, $src_alias, $pk); $src_entity->query_from($query, $src_alias); if ($this->is_unitary()) { foreach ($pk as $f) { $src_entity->query_where($query, $src_alias, $f, '=', DB::expr(':__' . $f)); } } else { $src_entity->query_where($query, $src_alias, $pk[0], 'IN', DB::expr(':__pks')); } } // Add joins to trg entity : $this->relationship->join($query, $src_alias, $trg_alias); // Restrict result with where conditions (in ON clause !!!) : foreach ($this->where as $w) { $expr = is_object($w['expr']) ? $w['expr'] : DB::expr(Database::instance()->quote($w['expr'])); $trg_entity->query_on($query, $trg_alias, $w['field'], $w['op'], $expr); } }