CakePHP'nin listesi sorun

5 Cevap php

Benim DB bu tablo var:

Group

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

Pages

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

Şimdi bu kullanarak 'grup' tarafından gruplar onları seçkin bir kutu yapmak istedim:

function add() {

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

}

In my add.ctp:

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

Çıktı:

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

Ben gibi gerçek grup adı değil grup kimliği görüntülemek için optgroup istedi:

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

Ben bunu denedim:

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

Ama 'Group.id' ve 'Group.name' bilinmiyor.

Teşekkürler!

5 Cevap

Bu deneyin:

$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
));

CakePHP'de seçenek grubundaki Seç kutusunu uygulanması çok basit bir iştir.

Seçenek grubu uygulamak için verilen adımları izleyin.

Eğer iki tablo varsa örneğin:

  1. Kategori
  2. Alt kategori

Masada ikisi için model oluşturmak ve alt kategori modelinde bir satır eklemek,

var $belongsTo = array('Category');

Yani Alt kategori model benziyorsun

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

Now come to controller part

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

Görünümü kısmen Görev

<?php 
echo $form->input('subcategory_id',array('type'=>'select','options'=>$subcategory));
?>

Ben Page ve Group modeli düzgün ilişkili olup olmadığından emin değilim:

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

Ama en azından, muhtemelen $ this-> Sayfa-> find (..) arama gibi var Sayfa denetleyicisi Grup modeli yüklemeniz gerekir:

$this->loadModel('Group');

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

Ayrıca, 'grup' => 'Group.name' find için ayarlayabilirsiniz başka param olduğunu. Bu kurulum SQL GROUP BY olacak.

Bana biraz zaman aldı ...

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

Aksi halde ("liste") bulmak özyinelemeli = -1 kullanır ve grup verileri yüklemek olmaz