Я использую Kohana 3.0, и моя задача - вставить данные в базу данных.Проблема в том, что мне нужно вставить более одной записи (так что ... в сыром SQL - более одного запроса).У меня есть поля project_id
, amount
и financiers
(это массив), который приходит от $_POST
.
В контроллере у меня есть что-то вроде этого:
$model_for_financiers->values($_POST);
$model_for_financiers->save_many();
Я создал метод с именем save_many()
в моей модели ORM.
public function save_many() {
foreach ($this->financiers as $financier_id) {
$this->created_at = time();
$this->amount = $this->amount * 100;
$this->financier_id = $financier_id;
$this->save();
$this->reset();
}
}
... и добавил financiers
в качестве игнорируемого столбца.
Есть два нежелательных поведения (или как я долженназывать их?) в моем коде:
В базу данных вставляется только последняя запись (не имеет значения, сколько идентификаторов в financiers
),
amount
умножается столько раз, сколько идентификаторов в financiers
.Например, если в этом массиве два идентификатора ... он будет умножен на 100 ' 00 (последние два нуля нежелательны).
Можете ли выпомогите мне с этим, ребята?Спасибо за совет.
Редактировать:
Вот моя вторая идея.Короче говоря, цикл в контроллере и каждый раз - новый экземпляр объекта.
Контроллер:
foreach ($_POST['financiers'] as $financier_id) {
$model_for_financiers = ORM::factory('Vcn_Project_Financier');
$model_for_financiers->values(array(
'amount' => $_POST['amount'],
'project_id' => $project_id,
'financier_id' => $financier_id
));
if ($model_for_financiers->check()) {
$model_for_financiers->save();
}
}
Модель:
public function save() {
$this->created_at = time();
$this->amount = $this->amount * 100;
// $this->reset();
parent::save();
}
Я действительно неЯ знаю, что за хрень, но в модели save()
, когда я пытаюсь var_dump()
любой переменной, которую я передал values()
, он говорит NULL
.Хорошей новостью является то, что теперь он вставляет правильное количество записей в базу данных.Плохая новость: все данные, переданные на values()
, пусты.
Помощь здесь очень важна.:)
Редактировать # 2:
3-е решение, которое не работает.: (
Контроллер:
$model_for_financiers = ORM::factory('Vcn_Project_Financier');
$model_for_financiers->save_many($_POST['amount'], $_POST['financiers'], $project_id);
Модель:
public function save_many($amount, $financiers, $project_id) {
foreach ($financiers as $financier_id) {
$this->values(array(
'amount' => $amount,
'financier_id' => $financier_id,
'project_id' => $project_id
));
if ($this->check()) {
$this->created_at = time();
$this->amount = $amount * 100;
$this->save();
}
$this->reset();
}
}
Вставляет только одну запись и игнорирует все, что было передано values()
как в решении #2.
Что происходит?