Как создать экземпляр класса с объектом результата в Codeigniter? - PullRequest
0 голосов
/ 01 сентября 2011

В документации для result () говорится, что мы можем передать имя класса для создания экземпляра для каждого объекта результата: http://codeigniter.com/user_guide/database/results.html

Я не могу понять, правильноспособ сделать это. Мне нужно передать несколько полей из результирующего объекта в конструктор.

$query = $this->db->query("SELECT * FROM users;");

foreach ($query->result('User') as $user)
{

  echo $row->name; // call attributes
  echo $row->reverse_name(); // or methods defined on the 'User' class

}

пожалуйста, дайте мне знать, если есть лучшие способы!

Ответы [ 2 ]

0 голосов
/ 04 мая 2012

Вы можете создать статический метод Class в своем классе User, который создает пользовательские или пользовательские экземпляры.Вам нужно будет добавить соответствующие экземпляры переменных в класс User.

var $username = FALSE;
var $password = FALSE;

public static function get_user_by_id($id)
{
      $CI =& get_instance();
      $query = $CI->db->get_where('users', array('id' => $id));
      $user = $query->row(0, 'User');
      return $user;
}

В этом примере я получаю ссылку на экземпляр CodeIgniter для доступа к базе данных.Поскольку вы не можете получить доступ к базе данных из метода Class, поскольку она не является экземпляром объекта.

0 голосов
/ 01 сентября 2011

Вы не можете.

Созданному объекту не могут быть переданы никакие аргументы, а это значит, что вам нужно создать метод, который можно использовать для передачи этих полей объекту, который создается:

$query = $this->db->query("SELECT * FROM users;");

foreach ($query->result('User') as $user)
{

  $row->init_my_fields('field1', 'field2'); //instead of passing the fields through the __construct()
  echo $row->name; // call attributes
  echo $row->reverse_name(); // or methods defined on the 'User' class

}
...