【问题标题】:Error with CakePHP returning a different table than the one specifiedCakePHP 返回与指定表不同的表时出错
【发布时间】:2011-09-05 15:46:25
【问题描述】:

所以我试图在我的元素视图中添加一个查找表,我通过在我的标签控制器中创建一个辅助函数来做到这一点。

<?php
class TagsController extends AppController {

    var $name = 'Tags';

    function gettags(){
        if (!empty($this->params['requested'])) {
            return $this->Tag->find('list', array('fields'=>'Tag.tag_name'));
        }
        return false;
    }
}

然后在我看来,我打电话

<? $tags = $this->requestAction('/tags/gettags'); debug($tags); ?>

但是,它返回错误

警告 (512):SQL 错误:1054:“字段列表”中的未知列“Tag.tag_name”[CORE/cake/libs/model/datasources/dbo_source.php,第 684 行] 查询:SELECT Tag.id, Tag.tag_name FROM users AS Tag WHERE 1 = 1

这意味着它认为我的标签表实际上是用户。这不会发生在标签视图中。有人对我做错了什么有任何想法吗?这些表不与其他任何东西或任何东西相关联。

我的标签模型是:

  <?php
class Tag extends AppModel {
    var $name = 'Tag';

    var $hasMany = array(
        'BrandTag' => array(
            'className' => 'BrandTag',
            'foreignKey' => 'tag_id',
            'dependent' => true,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        ));

    }
?>

【问题讨论】:

  • 你能附上你的标签模型文件吗?
  • 使用requestAction 真的不是一个好习惯。它有点打破了 MVC 的概念。您实际上应该在呈现该视图的控制器操作中设置 gettags 函数的结果。像这样的东西:$this-&gt;set('tags',$this-&gt;gettags());
  • 我会这样做,但 cakephp 中的元素视图没有附加直接视图。所以我只是把函数放在标签控制器中

标签: cakephp


【解决方案1】:

这样的事情应该可以工作:

$this->getModel('Tag')->find('list', array('fields'=>'Tag.tag_name');

如前所述,您不应该从这样的视图中检索,这不是好的 MVC 实践。

如果标签代码将被多个控制器检索,您应该考虑创建一个组件,这些控制器可以根据需要加载。

【讨论】:

  • 这基本上就是我调用 $this->Tag->... 时所做的事情...但奇怪的是它检索的是用户模型而不是标签模型
【解决方案2】:

Dao 可能值得进入您的 app/tmp/cache 文件夹并删除模型文件夹中的文件。您可能缓存了损坏的模型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 2012-07-18
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    相关资源
    最近更新 更多