2013-11-22 3 views
0

в торте PHP, я использую Containable поведения, чтобы присоединиться кучей таблиц и сделать хороший, большой массив с кучей данных, например, так:CakePHP Containable поле не работает

$this->paginate = array(
    'contain' => array(
     'House' => array(
      'Room' => array(
       'Chair' => array(), 
      ), 
     ), 
     'Apartment' => array(), 
    ), 
    "limit" => $limit, 
    'conditions' => array('Dwelling.id' => 1), 
); 

Однако это конечно возвращает каждый столбец каждой таблицы, и то, что я действительно хочу это только стул колонки, так что я делаю это, добавив «поля» массив с большим количеством моделей:

$this->paginate = array(
    'contain' => array(
     'House' => array(
      'fields' => array("id"), 
      'Room' => array(
       'fields' => array("id"), 
       'Chair' => array(), 
      ), 
     ), 
     'Apartment' => array(), 
    ), 
    "limit" => $limit, 
    'conditions' => array('Dwelling.id' => 1), 
    'fields' => array("id"), 
); 

а потом CakePHP говорит " закручивай его, я просто ничего не верну, кроме модели Жилища ». Зачем это делать? Посмотрев на реальные запросы MYSQL, он выглядит правильно запрошенным для базы данных; он просто не упаковывает все это в результирующий массив ...

+0

Пропал в другую проблему без ответа при использовании Контейнерного поведения. Вероятно, я просто скажу, что закручиваю его и перехожу с помощью собственного генератора запросов SQL. Cakephp ударяет за что-то вне коробки. –

ответ

1

Если вы хотите только «стул», то почему вы добавляете «квартиру»? В любом случае, попробуйте это

$this->paginate = array(
'contain' => array(
    'House' => array(
     'fields' => array("id"), 
     'Room' => array(
      'Chair' => array(), 
     ), 
    ), 
    'Apartment' => array(), 
), 
"limit" => $limit, 
'conditions' => array('Dwelling.id' => 1), 
'fields' => array("House.id", "Chair.id", "Chair.whatever"), 

);

+1

Ха-ха, я изменил имена таблиц на этот пример, чтобы сделать его более понятным ... Во всяком случае, это не сработало. Видимо, Cake бросил все это в первом запросе, и поскольку он использует несколько запросов для захвата более глубоких таблиц, он видел «Chair.id» и не узнавал его, бросая это: Столбец не найден: 1054 Неизвестный столбец «Стул». id 'in' where clause ' –

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