0

我有一个问题创建关系(外键)MI模型(表)之间,我跟着蛋糕文档,但无法正常工作关系(外键)CakePHP的

的关系是马卡报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' 
     ) 
    ); 

} 

?> 

ModelosContro米勒

<?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'); 
      } 
     } 
    } 
} 


?> 

错误抛出是:

错误:调用一个成员函数查找()一个非对象 文件:/var/www/tlfmovil/app/Controller/ModelosController.php
Line:31

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

对不起,我的英语不好!

+0

不使用英语进行命名的问题是,由于复数的处理方式不同,因此常规会变得无法使用。尝试在你的Marca模型中设置'public $ useTable ='marcas';'。 – Nunser 2013-04-23 15:05:57

+0

@nuns - 出现错误并不是因为缺少表格,而是因为没有找到模型,因为某些关联不起作用。 – Dave 2013-04-23 15:20:57

+0

检查是否实际使用'Modelo'模型,并且CakePHP不生成'通用'模型; '调试(get_class($ this-> Modelo));' – thaJeztah 2013-04-23 22:22:20

回答

0

即使使用var,您的关联看起来也不错,但它也不应该是数据库问题,否则Cake会通知您缺少数据库表。

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

+0

我试过你的代码,它对我很好。你确定你的Models文件名没有错字吗? – Chris 2013-04-24 15:09:36

+0

花了2天试图找到解决方案,并验证的形式,不知道为什么......问题是,模型名称以大写字母开头,我注意到通过您放置的链接..当我看到模型以大写开头 谢谢Chris PD:将链接放在收藏夹中xD – Cocuba 2013-04-26 21:10:31

+0

很高兴您找到解决方案,并且在线烘焙工具帮助! :) – Chris 2013-04-29 09:28:16

0

当指定$belongsTo$hasMany变量时,尝试使用public而不是var