【问题标题】:CakePHP containable fields don't workCakePHP 可包含字段不起作用
【发布时间】:2013-11-22 00:40:40
【问题描述】:

在 cake PHP 中,我使用可包含行为来连接一堆表,并用一堆数据创建一个漂亮的大数组,如下所示:

$this->paginate = array(
    'contain' => array(
        'House' => array(
            'Room' => array(
                'Chair' => array(),
            ),
        ),
        'Apartment' => array(),
    ), 
    "limit" => $limit, 
    'conditions' => array('Dwelling.id' => 1), 
);

但是,这当然会返回每个表的每一列,而我真正想要的只是椅子列,所以我这样做了,为很多模型添加了一个“字段”数组:

 $this->paginate = array(
    'contain' => array(
        'House' => array(
            'fields' => array("id"),
            'Room' => array(
                'fields' => array("id"),
                'Chair' => array(),
            ),
        ),
        'Apartment' => array(),
    ), 
    "limit" => $limit, 
    'conditions' => array('Dwelling.id' => 1), 
    'fields' => array("id"),
);

然后 CakePHP 说“去死吧,除了 Dwelling 模型,我根本不会返回任何东西。”为什么会这样做?在查看实际的 MYSQL 查询时,它似乎正在为所有这些正确查询数据库;它只是没有将它全部打包到结果数组中......

【问题讨论】:

  • 在使用 Containable 行为时遇到了另一个没有答案的问题。我可能只想说把它搞砸,然后使用我定制的 SQL 查询生成器。 Cakephp 因在框外做任何事情而受到打击。

标签: php cakephp cakephp-2.3


【解决方案1】:

如果您只想要“椅子”,那么为什么要添加“公寓”?不管怎样,试试这个

 $this->paginate = array(
'contain' => array(
    'House' => array(
        'fields' => array("id"),
        'Room' => array(
            'Chair' => array(),
        ),
    ),
    'Apartment' => array(),
), 
"limit" => $limit, 
'conditions' => array('Dwelling.id' => 1), 
'fields' => array("House.id", "Chair.id", "Chair.whatever"),

);

【讨论】:

  • 哈哈,为了更清楚,我把表名改成了这个例子……反正这样不行。显然,Cake 在第一个查询中将其全部扔掉,并且由于它使用多个查询来获取更深的表,因此它看到了“Chair.id”并且没有识别它,抛出这个:Column not found: 1054 Unknown column“Chair.id”。 'where 子句'中的 id'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
相关资源
最近更新 更多