public function get_options() { $html = ''; /** @var $class table */ $class = $this->get_link_module(); $fields = $this->get_link_fields(); /** @var $object table */ $obj = new $class(); if (!isset($this->options['order'])) { $this->options['order'] = $obj->get_primary_key_name(); } $options = $class::get_all(array_merge($fields, [$obj->get_primary_key_name(), 'parent_' . $obj->get_primary_key_name()]), $this->options); if (!$this->required) { $html .= '<option value="0">- Please Select -</option>'; } $parents = new collection(); $options->iterate(function ($object) use(&$parents) { if (!$object->get_parent_primary_key()) { $object->_children = new collection(); $parents[$object->get_primary_key()] = $object; } else { if (isset($parents[$object->get_parent_primary_key()])) { $parents[$object->get_parent_primary_key()]->_children[] = $object; } } }); /* @var \classes\table $object */ $parents->iterate(function ($object) use(&$html, $fields) { $html .= '<option value="' . $object->{$object->get_primary_key_name()} . '" ' . ($this->is_selected($object->{$object->get_primary_key_name()}) ? 'selected="selected"' : '') . '>' . $this->get_object_title($object, $fields) . '</option>'; if ($object->_children->count()) { $object->_children->iterate(function ($sub_object) use(&$html, $fields) { $html .= '<option value="' . $sub_object->{$sub_object->get_primary_key_name()} . '" ' . ($this->is_selected($sub_object->{$sub_object->get_primary_key_name()}) ? 'selected="selected"' : '') . '>' . $this->get_object_title($sub_object, $fields, 1) . '</option>'; }); } }); return $html; }