2014-09-09 3 views
0

У меня есть несколько таблиц, которые связаны (hasMany), как дерево: 1 -> 2 -> 3. Есть несколько записей в таблице 1, таблица 2 и 3.CakePHP вложенных ассоциаций, пустые записи ошибка

Я использую CakePHP для извлечения всех данных из таблицы 1 с подключенной таблицей 2, которая связана с таблицей 3. Однако в немногих записях в таблице 1 нет связанных записей в таблице 2. То же самое в таблице 2, некоторые записи не имеют подключенных записей в таблице 3.

Для второй ситуации скрипты работают нормально. Я получаю что-то вроде этого: 1 -> 2 -> empty. Но в первой ситуации, когда данные выглядят примерно так: 1-> empty -> empty, я получаю ошибки, что таблица 3 не существует.

Есть ли какие-либо решения, позволяющие пропустить эти ошибки и получить таблицу форматированных ассоциаций в качестве возврата к моему запросу?

$options = array(
     'conditions' => array(
      'Table1.id' => $table1_ids 
     ), 
     'contain' => array(
      'Table2' => array(
       'conditions' => array(
        'id' => $table2_ids 
       ), 
       'Table3' => array(
        'conditions' => array(
         'date_end >' => date('Y-m-d H:i:s') 
        ), 
        'fields' => array('id'), 
       ), 
       'fields' => array() 
      ), 
     ), 
     'fields' => array('id', 'name') 
    ); 
    $this->Table1->recursive = -1; 
    $table1 = $this->Table1->find('all', $options); 
+1

трудно узнать, не просматривая код, который фактически выполняет скрипт. – Nunser

+0

Как вы получаете эти записи? можете ли вы поделиться кодом? –

+0

Я добавил код. Решение для этого может быть для каждой записи в Таблице 2, которую я должен извлечь для записей в Таблице 3. Однако это означает много запросов к базе данных ... – VIPPER

ответ

0

Это не так уж CakePHP виноват здесь, но ваше отсутствие понимания того, что contain делает.

Что вы ищете, это left joins, что на самом деле намечено в документации contain.

+0

Когда я использую левые соединения, я получаю только столбцы из одной таблицы. В DebugKit я вижу, что SQL-запрос для объединения извлекает столбцы только из одной таблицы. Зачем? – VIPPER

+0

Хорошо! Я нашел это [ссылка] (http://stackoverflow.com/questions/12406081/only-one-tables-datas-selected-when-join-two-tables-in-cakephp) – VIPPER

+0

Использование объединений приводит к тому, что мы надеваем 't получить форматированные данные, я имею в виду, что у нас несколько одинаковых записей в таблице 1: '[1] -> [2] [1] -> [2]' Есть ли какая-либо быстрая функция в CakePHP для сортировки этих данных и присвойте все сопоставимые записи из таблицы 2 в одну ассоциативную таблицу: '[1] -> { [2] [2] }' – VIPPER

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