【问题标题】:Retrieving Nested Referral Data in CakePHP 3.x在 CakePHP 3.x 中检索嵌套的推荐数据
【发布时间】:2016-02-24 21:02:29
【问题描述】:

我试图弄清楚如何在 CakePHP 3.x 中获取嵌套子对象的值

一个基本示例由三个实体组成:

服务器、机架、操作系统

表格:

机架 - id、名称

服务器 - id、主机名、rack_id、operating_system_id

Operating_systems - ID、名称

机架有许多服务器

服务器属于操作系统和属于机架

如何在我的机架视图中引用机架->服务器->操作系统->名称?

//View.ctp
<?php foreach ($rack->servers as $servers):
echo h($servers->hostname) 
echo h($servers->operating_system->name)   //Doesn't output OS Name
endforeach; ?>

//View Function in RacksController:
public function view($id = null)
{
    $rack = $this->Racks->get($id, [
        'contain' => ['Servers']
    ]);
    $this->set('rack', $rack);
    $this->set('_serialize', ['rack']);
}

不确定这是否最终成为控制器中的自定义查询,或者是否有内置的 Cake 语法来完成我需要的。感谢您的帮助。

【问题讨论】:

    标签: php cakephp cakephp-3.0


    【解决方案1】:

    找到答案:

    Cake 3.x passing-conditions-to-contain

    $rack = $this->Racks->get($id, [
            'contain' => ['Servers','Servers.OperatingSystems']
        ]);
    

    解决方案是使用点符号表示深度嵌套的关联。感谢 aknd 为我指明了正确的方向。

    【讨论】:

      【解决方案2】:

      尝试:

      $rack = $this->Racks->get($id, [
          'contain' => ['Servers' => 'OperatingSystems']
      ]);
      

      【讨论】:

      • 嗯,在控制器中试过这个,结果是:错误:不支持的操作数类型
      • 在@aknd 的解决方案中,您需要将'OperatingSystems' 放入另一个数组中(即'contain' =&gt; ['Servers' =&gt; ['OperatingSystems']])。这将解决“不支持的操作数类型”错误并让您使用数组表示法,它有时比点表示法更清晰。
      猜你喜欢
      • 1970-01-01
      • 2016-09-16
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      相关资源
      最近更新 更多