2012-05-25 2 views
4

У меня есть ситуация, когда по внешним причинам мне приходится напрямую сохранять записи объединений, а не сохранять их как часть соединения. Вот что я имею в виду:Почему saveAll() сохраняет только последнюю запись?

  • У меня есть модель Firm, данные которой вытягиваются из внешнего источника.
  • У меня есть County модели в моем приложении базе данных
  • У меня есть counties_firms присоединиться к таблице, которую я использую, чтобы связать эти внешние фирмы графств.

Из-за того, что там живет, я не редактирую модель Firm и не редактирую модель County. Я просто редактирую ассоциации. У меня есть модель Firm, чтобы инкапсулировать все, что мне нужно делать с данными фирмы, и один из этих методов - Firm::saveCounties($data). Он:

  • Принимает входящие данные, содержащие идентификатор фирмы и идентификаторы округа, которые должны быть связаны.
  • Удаляет все существующие записи объединений для этого округа
  • Попытки сохранить все новые записи объединений.

Что я нахожу, так это сохранение только последней записи округа. Вот входящие данные:

Array 
(
    [0] => Array 
     (
      [firm_id] => 13 
      [county_id] => 4fa16e24-a25c-4523-8a9e-7d1d147402e8 
     ) 

    [1] => Array 
     (
      [firm_id] => 13 
      [county_id] => 4fa16e27-ccd0-4f22-97da-7d1d147402e8 
     ) 

    [2] => Array 
     (
      [firm_id] => 13 
      [county_id] => 4fa16e4a-68f8-4fb1-95bb-7d1d147402e8 
     ) 

) 

Учитывая, что данные, я создаю на лету ассоциацию между Firm и CountiesFirm и пытается $this->CountiesFirm->saveAll($data).

Как я уже упоминал, только последнее из 3 ассоциаций графств в этом примере получает спасение. Любая идея, что я могу пропустить?

Спасибо.

ответ

0

Я считаю, что вам не хватает уровня в массиве ... он должен выглядеть примерно так ...

Array(
    'CountiesFirm' => array(
     [0] => Array 
     (
      [firm_id] => 13 
      [county_id] => 4fa16e24-a25c-4523-8a9e-7d1d147402e8 
     ) 
     [1] => Array 
     (
      [firm_id] => 13 
      [county_id] => 4fa16e27-ccd0-4f22-97da-7d1d147402e8 
     ) 
     [2] => Array 
     (
      [firm_id] => 13 
      [county_id] => 4fa16e4a-68f8-4fb1-95bb-7d1d147402e8 
     ) 
    ) 
) 

Попробуйте это и дайте мне знать, вы результаты

2

Ваш массив прекрасно , Кажется, модель не очищает свой идентификатор, вы можете попытаться добавить ['id'] => null к каждой записи в вашем массиве, чтобы принудительно удалить идентификатор модели.

Это сработало для меня.

+0

Большое спасибо Стефану! Я просто делал простое спасение, не нуждаясь в том, чтобы быть таким эффективным, но мог только получить последнюю запись в базе данных. Установка id в NULL делает его идеальным. –

Смежные вопросы