В настоящее время у меня есть веб-сайт, который должен иметь возможность делать заметки из пользовательского ввода и сохранять их в базе данных. Я ищу несколько советов о том, как лучше всего этого достичь.
На веб-сайте должны отображаться только самые последние заметки, которые были добавлены, но все остальные заметки должны быть сохранены (но скрыты). Я не знаю, сколько раз пользователь будет вводить заметки. Первоначально я думал, что нужно динамически добавлять столбец в базу данных каждый раз, когда пользователь вводит заметки, но потом я получу новый столбец для каждой записи заметок. Стоит отметить, что заметки связаны с именем файла, поэтому быть много строк в базе данных, которые будут иметь разные заметки.
Метод dbforge был тем способом, который я собирался использовать, но он будет неоднократно пытаться добавить «заметки» в базу данных (которая уже будет существовать после одного шага).
$fields = array(
('notes') => array('type' => 'TEXT','constraints' =>'255')
);
$this->dbforge->add_column('mytable', $fields);
Кто-нибудь знает лучший способ сделать это? Я использую php и рамки codeigniter.
Вся помощь очень ценится!
У меня была бы таблица примечаний, в которой хранятся идентификатор пользователя, примечание и дата добавления.
По вашему мнению, ваша форма будет указывать на это в вашем контроллер:
public function addNote($user_id)
{
$this->form_validation->set_rules('note', 'Note', 'required');
if ($this->form_validation->run() == true) {
$array = array (
'user_id' => $user_id,
'note' => $this->input->post('note')
);
$this->your_model->addRecord('notes', $array);
}
}
addRecord()
функция в вашем модель будет выглядеть так:
public function addRecord($table, $array)
{
$this->db ->insert($table, $array);
return $this->db->insert_id();
}
Затем вы можете сделать запрос, подобный этому, и передать результаты обратно на просмотр:
public function getLatestNoteByUser($user_id)
{
$this->db->select('id, note')
->from('notes')
->where('note_added_by', $user_id)
->order_by('date_added', desc)
->limit(1);
return $this->db->get()->row();
}
Это вернет только последнюю заметку, добавленную указанным пользователем. Вы можете установить ограничение на любое значение и вернуть row_array()
вместо row()
, Вы могли бы даже пройти $limit
, в параметрах функций и использования ->limit($limit)
,
Других решений пока нет …