2012-06-15 3 views
0

Im пытается с 3-дневного решения yout, чтобы заставить это работать, но мне нужна помощь. почти все я сделал проверка & погрешность. если кто-то может дать мне решение, я мог бы перепрограммировать его и лучше понять cakephp.cakephp: индексный сайт со всеми связанными данными habtm

Что я хочу это вид индекса, как это (сделал графики): http://www.bilder-upload.eu/show.php?file=fd8e93-1340110385.png

дверь и ключ имеет HABTM отношение, и я хочу, чтобы перечислить все двери, которые принадлежат к 1 ключа

я есть 3 таблицы:

двери (идентификатор, название, TXT) ключи (идентификатор, номер, описание) doors_keys (door_id, KEY_ID)

вот мой key.php

<?php 

class Key extends AppModel { 
    public $hasAndBelongsToMany = array ('Door'); 
    public $displayField = 'description'; 
    // containable 
    var $actsAs = array('Containable'); 
} 

door.php

<?php 



class Door extends AppModel { 
    public $name = 'Door'; 
    public $belongsTo = array('Building'); 
    //public $actsAs = array('Containable'); 
    public $hasAndBelongsToMany = array('Key'); 
    // validation array wird aufgemacht 
    public $validate = array(
    // validation wird für das Datenbankfeld title definiert 
     'title' => array(
     // Feld darf nicht leer sein 
      'rule' => 'notEmpty' , 
      // Eintrag muss ausgewählt werden 
      'required' => true 
     ), 
     // validation für das DB Feld building_id 
     'building_id' => array(
      'rule' => 'notEmpty' , 
      'required' => true 
     ), 
    ); 
    // viele türen sind in einem Gebäude-> n:1->$belongsTo 
    // in der tabelle doors muss ein fremdschluessel auf die andere datenbank angelegt sein 


} 

keyscontroller.php (не работает)

class KeysController extends AppController { 


public function index() { 
    $this->paginate = array(
     'contain' => array(
     // we want to get the key 
     'Door' => array(
     // the info i wanna know is in the field txt 
      'fields' => array('txt') 

     ), 

     ), 
     ); 
     $keys = $this->paginate('Key'); 
    debug($this->set(compact('keys'))); 
} 

index.ctp от ключей

<h2>Schluessel selbstgemacht</h2> 

<table> 
<!-- tr definiert eine Tabellenzeile --> 
    <tr> 
     <!-- th Überschriften in der Zeile --> 
     <th>ID</th> 
     <th>Description</th> 
     <th>number</th> 
    </tr> 


<?php foreach($keys as $key): ?> 
    <tr> 
     <td><?php echo $key['Key']['id'] ?></td> 
     <td><?php echo $key['Key']['description'] ?></td> 
     <td><?php echo $key['Key']['number'] ?></td> 
     <td><?php echo $key['Door']['txt'] ?></td> 

     <td> 
      <?php echo $this->Html->link('Details', '/keys/view/' . $key['Key']['id']) ?> 
      <?php echo $this->Html->link('bearbeiten', '/keys/edit/' . $key['Key']['id']) ?> 
      <?php echo $this->Html->link('loeschen', '/keys/delete/' . $key['Key']['id']) ?> 
     </td> 
    </tr> 
<?php endforeach; ?> 
</table> 

Я думаю, что это основной вопрос, но я не могу найти решение. поэтому мне нужно немного помочь в этом. благодаря

+0

Я не знаю, как отредактировать мое сообщение. поэтому приведенный выше пример неверен, пожалуйста, проигнорируйте следующий bacause, который показывает неправильное: door1 ---- key1 ---- key2 door2 --- key1 door3 ---- key4 – Labamba

+0

все еще нужна помощь. посмотрите под этим сообщением. – Labamba

+0

, чтобы изменить свой вопрос, прямо над этим разделом комментариев, вы должны увидеть тег, который вы выберете, cakephp. Прямо внизу это должно быть и отредактировать ссылку. – Fewfre

ответ

0

Добавить 'recursive' => 1 вашу от двери> найти() для того, чтобы получить данные для соответствующих клавиш:

class KeysController extends AppController { 
    public function index() { 

    $doors = $this->Door->find(
     'recursive' => 1 
    ); 
    $this->set('doors', $doors); 

    // Look at the result 
    debug($doors); 
} 

Однако использование recursive становится довольно грязным, если ваши модели отношение сложно. Вместо этого рекомендуется использовать ContainableBehavior.

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