2013-09-27 2 views
1

Моя цель - отобразить 1 Проекты и много ключевых слов к ней. Моя БД проста:
cakephp форматирование массива

Проект имеет много Ключевые слова
Слово принадлежит Project

До сих пор так хорошо. Теперь я пытаюсь получить информацию в моем ProjectsController:

public function view($id = null) 
{ 
    $this->Project->bindModel(array('hasMany' => array('Keyword' => array('className' => 'Keyword', 
                'foreignKey' => 'project_id') 
           )), false); 
    $this->paginate['Project']['conditions'] = array('Project.id' => $id); 
    $this->paginate['recursive'] = '2'; 
    $this->set('projects', $this->paginate('Project')); 
    $Projects = $this->paginate('Project'); 
    $this->set('projects', $this->paginate()); 
} 

распечатав массив это выглядит немного неожиданный:

Array 
(
    [0] => Array 
    (
     [Project] => Array 
     (
      [id] => 3 
      [title] => Foo 
      [created] => 2013-08-05 17:39:07 
      [modified] => 2013-08-05 17:39:07 
     ) 
     [Keyword] => Array 
     (
      [0] => Array 
      (
       [id] => 1 
       [project_id] => 3 
       [title] => Num1 
       [demand] => 50000000000 
       [competition] => 37889.56700 
       [cpc] => 676.50 
       [created] => 2013-06-26 17:54:48 
       [modified] => 2013-09-19 13:37:25 
        ) 
     ) 
    ) 
    [1] => Array 
    (
     [Project] => Array 
     (
      [id] => 4 
      [title] => Bar 
      [created] => 2013-08-05 17:39:07 
      [modified] => 2013-08-05 17:39:07 
      ) 
     [Keyword] => Array 
     (
      [0] => Array 
      (
       [id] => 3 
       [project_id] => 4 
       [title] => Num1 
       [demand] => 76534000000 
       [competition] => 5555.55560 
       [cpc] => 99.34 
       [created] => 2013-06-26 17:54:48 
       [modified] => 2013-09-19 13:37:36 
      ) 
     ) 
    ) 
) 

Теперь у меня есть проблема, как я отобразить его с правый Project.id? потому что новый созданный массив содержит другой идентификатор, чем Project.id. Мой вопрос, как я могу выбирать правильный Project.id для его отображения только в моем /View/[id]

EDIT

Я думаю, что лучший способ для работы, является матричная структура, как это:

Array 
(
    [Project] => Array 
    (
     [id] => 3 
     [title] => Lerncoachies 
     [created] => 0000-00-00 00:00:00 
     [modified] => 2013-08-05 17:39:07 
    ) 
     [Keyword] => Array 
     (
      [0] => Array 
      (
       [id] => 1 
       [project_id] => 3 
       [title] => Num1 
       [demand] => 50000000000 
       [competition] => 37889.56700 
       [cpc] => 676.50 
       [created] => 2013-06-26 17:54:48 
       [modified] => 2013-09-19 13:37:25 
      ) 
     ) 
    ) 
) 
+0

Это всегда хороший намек на то, чтобы не использовать термины типа «немного странно», а вместо этого (дополнительно) четко сказать, чего именно вы ожидали. Если кто-то знает торт PHP, он или она может просто рассказать вам, как это делается на примере, который вам нужен, но не мог, но так, как вы это делаете (ваш «немного странный» способ). – hakre

+0

хорошо хороший аргумент. Я обновил свой вопрос – CTSchmidt

+0

Разве вы не хотите разбивать страницы на страницы? –

ответ

1

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

Это ожидаемый результат для разбиения на страницы проектов.

Если вы хотите постраничной Ключевые слова тогда:

$this->Project->recursive = 1; 
$project = $this->Project->findById($id); 
$this->loadModel('Keywords'); // I don't remember if this is needed 
$this->paginate['Keywords'] = array(
    'project_id' => $project['Project']['id'] 
); 
$this->set('keywords', $this->paginate('Keyword')); 
$this->set('project', $project); 

Вы будете иметь представление с 1 проекта, и вы будете иметь возможность постраничной Ключевые слова, связанные с данным проектом с сортировкой.

1
public function view($id = null) { 
    $this->Project->bindModel(array(
     'hasMany' => array('Keyword' => array(
      'className' => 'Keyword', 
      'foreignKey' => 'project_id') 
     )), false 
    ); 
    $this->Project->recursive = 2; 
    $project = $this->Project->findById($id); 
} 

Теперь ваш массив проектов должен соответствовать вашим требованиям.

+0

Вы частично правы, но вы не использовали paginate witch, чтобы сортировать таблицу. – CTSchmidt

+0

Вы хотите отсортировать по странице? что здесь ничего не значит. –

+0

вы не можете получить массив так, как вы хотите, если вы используете paginate здесь –

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