Проблема со списком CakePHP - PullRequest
2 голосов
/ 18 января 2010

У меня есть эта таблица в моей БД:

Group

 - ID-Name
 - 1 -abc
 - 2 -def
 - 3 -ghi

Pages

 - id-group_id-name
 - 1 -1       -home
 - 2 -1       -about us

Теперь я хотел создать поле выбора, которое группирует их по группам, используя:

function add() {

$this->set('pages', $this->Page->find('list', array('fields' => array('Page.id', 'Page.name', 'Page.group_id'))));

}

Inmy add.ctp:

echo $form->input('group_id', array('options' => $pages));

Вывод:

<select name="data[Page][id]" id="PageId">
<optgroup label="1">
<option value="1">Home</option>
<option value="2">About Us</option>
</optgroup>
</select>

Я хотел, чтобы optgroup отображала реальное имя группы, а не идентификатор группы, например:

<select name="data[Page][id]" id="PageId">
<optgroup label="abc">
<option value="1">Home</option>
<option value="2">About Us</option>
</optgroup>
</select>

Я пробовал это:

$this->Page->find('list', array('conditions' => 'Group.id = Page.id', 'fields' => array('Page.id', 'Page.name', 'Group.name')));

Но «Group.id» и «Group.name» неизвестны.

Спасибо!

Ответы [ 5 ]

3 голосов
/ 19 января 2010

Попробуйте это:

$this->Page->find('list', array(
    "fields" => array("Page.id", "Page.name", "Group.name"),
    "joins" => array(
        array(
            "table" => "groups",
            "alias" => "Group",
            "type" => "INNER",
            "conditions" => array("Group.id = Page.id")
        )
    ),
    "order" => array(...) // whatever ordering you want
));
1 голос
/ 15 февраля 2012

Реализация поля выбора в группе параметров в cakephp - очень простая задача.

Выполните указанные шаги для реализации группы параметров.

например, если у вас есть две таблицы:

  1. Категория,
  2. 1010 * категория *

Создать модель для обеих таблиц и добавить одну строку в модель подкатегории,

var $belongsTo = array('Category');

Итак, ваша модель подкатегории выглядит как

class Subcategory extends AppModel 
{
    var $name = 'Subcategory';
    var $belongsTo = array('Category');
}

Now come to controller part

$this->set('subcategory',$this->Subcategory->find('list', array(
    "fields" => array("Subcategory.id", "Subcategory.field2", "Category.field1"),
    "joins" => array(
            array(
                    "table" => "categories",
                    "alias" => "Category",
                    "type" => "INNER",
                    "conditions" => array("Category.id = Subcategory.category_id")
            )
    ),
)));?>

Задание в видимой части

<?php 
echo $form->input('subcategory_id',array('type'=>'select','options'=>$subcategory));
?>
1 голос
/ 28 апреля 2010

Мне понадобилось время ...

$this->Page->find('list', array('conditions' => 'Group.id = Page.id', 'fields' => array('Page.id', 'Page.name', 'Group.name'),'recursive'=0));

В противном случае find ("список") использует recursive = -1 и не будет загружать данные группы

0 голосов
/ 22 января 2010

также, 'group' => 'Group.name' - это еще один параметр, который вы можете установить для поиска. Это установит GROUP BY в SQL.

0 голосов
/ 19 января 2010

Я не уверен, правильно ли связаны ваши модели страниц и групп:

http://book.cakephp.org/view/78/Associations-Linking-Models-Together

Но, по крайней мере, вам, вероятно, нужно загрузить модель группы в контроллер страницы, где у вас есть поиск $ this-> Page-> find (..) примерно так:

$this->loadModel('Group');

$this->Page->find('list', array('conditions' => 'Group.id = Page.id', 'fields' => array('Page.id', 'Page.name', 'Group.name')));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...