如何从CakePHP 3.x中的关联表接收数据作为对象(当前作为数组接收)

时间:2015-05-08 12:44:43

标签: php cakephp cakephp-3.0

我尝试使用belongsTo关联表格: http://book.cakephp.org/3.0/en/orm/associations.html#belongsto-associations

我的

中有这段代码
  

JobsController.php:

class JobsController extends AppController
{
    public $name = 'Jobs';

    /**
     * Index method
     *
     * @return void
     */
    public function index()
    {
        //Get Jobs info
        $getjobs = TableRegistry::get('Jobs');
        $jobs = $getjobs->find('all')->contain(['Types']);
        $this->set('jobs',$jobs);
    }
}
  

JobsTable.php:

<?php

namespace App\Model\Table;

use Cake\ORM\Table;

class JobsTable extends Table
{
    public function initialize(array $config)
    {
        $this->table('jobs');
        $this->belongsTo('types', [
            'foreignKey' => 'type_id',
            'joinType' => 'INNER',
        ]);
    }

}
  

TypesTable.php:

<?php

namespace App\Model\Table;

use Cake\ORM\Table;

class TypesTable extends Table
{
    public function initialize(array $config)
    {
        $this->table('types');
    }

}

而且我收到了所需的数据,但是我没有把它作为一个对象接收,而是用手册写的,我把它作为一个数组接收,而不是应该是什么

  

所以现在我这样访问它(因为它是一个名为 types 的数组):

<?php foreach($jobs as $job) : ?>
        <?php var_dump($job->types['color']); ?>
<?php endforeach; ?>
  

但它应该是这样的(根据文档,它应该是一个名为 type 的对象):

<?php foreach($jobs as $job) : ?>
    <?php var_dump($job->type->color); ?>
<?php endforeach; ?>

我做错了什么?

1 个答案:

答案 0 :(得分:3)

注意你的大小写,关联被定义为types,但是你将它包含在Types中,这会使相关数据被水合的结果集分组运行。

$this->belongsTo('Types', /* ... */);

那应该解决它。

我认为这种行为是否会被视为有问题甚至是错误都是值得商榷的。