CakePHP - 如何找到绕口令的所有语言?

时间:2011-08-02 11:53:51

标签: cakephp cakephp-1.3

模型

<?php
class Tonguetwister extends AppModel {
        var $name = 'Tonguetwister';
        //The Associations below have been created with all possible keys, those that are not needed can be removed

        var $belongsTo = array(
                'language' => array(
                        'className' => 'language',
                        'foreignKey' => 'language_alias',
                        'dependent'=> true
                )
        );
}
?>

控制器

<?php
class TonguetwistersController extends AppController {

        var $name = 'Tonguetwisters';
        var $uses = array('Tonguetwister', 'Language');

        function index() {
                $this->set('languages', $this->Language->find('all'));
        }

        function view($id = null) {
                if (!$id) {
                        $this->Session->setFlash(__('Invalid tonguetwister', true));
                        $this->redirect(array('action' => 'index'));
                }
                $this->set('tonguetwisters', $this->Tonguetwister->find('all', array('conditions' => array('language_alias' => $id))));
        }

}
?>  

我只想在index()上看到有绕口令的语言。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

可能有一种更有效的方法,但这里是如何从Tonguetwister表中选择唯一的语言:

function index() {
    $languageList = $this->Tonguetwister->find( 
        'list',
        array(
            'fields' => array( 'language_alias', 'language_alias' ),
            'group' => 'Tonguetwister.language_alias',
            'recursive' => -1
        )
    );

    // $languageList is now an array that holds the language ids

    $this->set(
        'languages', 
        $this->Tonguetwister->Language->find(
            'all',
            array( 
                'conditions' => array( 
                    'Language.id' => $languageList
                ) 
            )
        )
    );
}

顺便说一下,您不需要将语言放入$uses。由于它们具有关系集,因此您可以使用$this->Tonguetwister->Language访问语言模型。

答案 1 :(得分:1)

你真的不需要为此做两个SQL查询。如果表格在“language_alias”上加入,您可以执行以下操作:

function index() {
    $this->Language->recursive = 0;
    $this->set('languages', $this->Language->find('all', array(
        'conditions' => array($this->Language->alias.'.language_alias' => $this->Tonguetwister->alias.'.language_alias')
    ));
}

您应该只执行一个将正确连接表的查询。