关系(foreignkey)CakePhp

时间:2013-04-23 14:58:31

标签: php cakephp foreign-keys cakephp-2.0 foreign-key-relationship

我在创建mi模型(表格)之间的关系(外键)时遇到问题,我按照蛋糕文档但不起作用

关系是Marca 1-N Modelos

模型Marca.php

<?php
class Marca extends AppModel
{
    var $name = 'Marca';
    public $displayField = 'nombre';
    var $hasMany = array(
        'Modelo' => array(
            'className' => 'Modelo',
            'foreignKey' => 'marca_id'
        )
    );

}

?>

模型Modelo.php

<?php
class Modelo extends AppModel
{
    var $name = 'Modelo';
    var $belongsTo = array(
        'Marca' => array(
            'className' => 'Marca',
            'foreignKey' => 'marca_id'
        )
    );

}

?>

ModelosController

<?php
class ModelosController extends AppController{
    var $name = 'Modelos';
    var $helpers = array('Html','Form');
    //var $scaffold;

    function index(){
        $modelos = $this->Modelo->find('all',array(
            'fields'=>array(
                'Modelo.nombre',
                'Modelo.valido',
                'Modelo.id',
                'Modelo.marca_id'),
            'order'=>'Modelo.nombre ASC')
        );
        $this->set('modelos',$modelos);
    }

    function add(){
        if (!empty($this->data)){
            $this->Modelo->create();

            if ($this->Modelo->save($this->data)){
                $this->Session->SetFlash('Modelo Nuevo Creado');
                $this->redirect(array('action'=>'index'),null,true);
            }else{
                $this->Session->SetFlash('No se ha Agregado el Modelo, intente de Nuevo');
            }
        }
        // $this->loadModel('Marca');
        $marcas = $this->Modelo->Marca->find('list');    <<-----this is 31 line, where is the error
        debug($marcas);
        $this->set(compact('marcas'));
    }

    function edit($id = null){
        if (!$id){
            $this->Session->SetFlash('Modelo Incorrecto');
            $this->redirect(array('action'=>'index'),null,true);
        }

        if (empty($this->data)){
            $this->data = $this->Modelo->find('first',array('conditions'=>array('Modelo.id'=> $id)));     
        }else{
            if ($this->Modelo->save($this->data)) {
                $this->Session->SetFlash('El Modelo se ha Guardado');
                $this->redirect(array('action'=>'index'),null,true);
            }else{
                $this->Session->SetFlash('La Modelo No fue Guardado, intente de Nuevo');
            }
        }
    } 
}


?>

错误抛出是:

错误:在非对象上调用成员函数find() 文件:/var/www/tlfmovil/app/Controller/ModelosController.php
行:31

我认为错误是因为关系设置不正确,请帮助我。

抱歉我的英文不好!

2 个答案:

答案 0 :(得分:0)

指定publicvar vars时,请尝试使用$belongsTo代替$hasMany

答案 1 :(得分:0)

即使使用var,您的关联似乎也很好,它也不应该是数据库问题,否则Cake会通知您缺少数据库表。

但是你应该更多地遵循CakePHP惯例,以确保问题不是来自错字。 使用蛋糕烘焙控制台或online CakePHP baking tool生成模型和控制器文件(您可以随后将翻译更改为西班牙语)以排除代码中的约定问题。