CakePHP 3 - 模型之间的关系

时间:2015-05-15 18:53:11

标签: relational-database cakephp-3.0

我按照CakePHP 3的官方文档关联了两个模型,并且无法在视图(模板)中返回其中一个模型的值。

守则:

工作 - 实体

namespace App\Model\Entity;

use Cake\ORM\Entity;

class Work extends Entity

    {      
        protected $_accessible = [
            'project' => true,
            'client' => true,
            'filter' => true,
            'tech_1' => true,
            'tech_2' => true,
            'tech_3' => true,
            'tech_4' => true,
            'job' => true,
            'status' => true,
            'link' => true,
        ];
    }

WorksImage - 实体

namespace App\Model\Entity;

use Cake\ORM\Entity;

class WorksImage extends Entity
{
    protected $_accessible = [
        'photo' => true,
        'photo_dir' => true,
        'work_id' => true,
        'work' => true,
    ];
}

PagesController - Controller:

 namespace App\Controller;

    use Cake\Core\Configure;
    use Cake\Network\Exception\NotFoundException;
    use Cake\View\Exception\MissingTemplateException;


    class PagesController extends AppController
    {

        public function portfolio()
        {          
            $this->loadModel('Works');
            $this->loadModel('WorksImages');
            $works = $this->Works->find('all',['contain' => ['WorksImages'],'limit' => 10, 'order' => ['Works.created' => 'DESC']]);
            $this->set(compact('works'));
        }

}

WorksTable - 表:

namespace App\Model\Table;

use App\Model\Entity\Work;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;

class WorksTable extends Table
{
    public function initialize(array $config)
    {
        $this->table('works');
        $this->displayField('project');
        $this->primaryKey('id');
        $this->addBehavior('Timestamp');
        $this->hasOne('WorksImages', [
            'foreignKey' => 'work_id'
        ]);
    }

WorksImagesTable - 表

namespace App\Model\Table;

use App\Model\Entity\WorksImage;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;

class WorksImagesTable extends Table 
    {

    public function initialize(array $config) 
    {
        $this->table('works_images');
        $this->displayField('id');
        $this->primaryKey('id');
        $this->addBehavior('Timestamp');
        $this->belongsTo('Works', [
            'foreignKey' => 'work_id',
            'joinType' => 'INNER'
        ]);
    }

投资组合 - 查看(模板)

<div class="container">
    <div class="span12">
        <h1>Portfólio</h1>
        <div>
            <?php foreach ($works as $work): ?>
                <div>
                    <p><?= 'Conteúdo da tabela Works = ' . $work->project ?></p>
                    <p><?= 'Conteúdo da tabela WorksImages = ' . $work->work_id ?></p>
                </div>
            <?php endforeach ?>
        </div>
    </div>
</div> 

我无法从WorksImagesTable模型返回任何值。在调试期间,我意识到表是相关的,另外,cake在视图中没有返回错误。

我无法理解错误。

我提前感谢任何帮助。

感谢。

1 个答案:

答案 0 :(得分:0)

在foreach循环中(debug($ work-&gt; works_image))返回如下内容:

object(App\Model\Entity\WorksImage) {

    'new' => false,
    'accessible' => [
        'photo' => true,
        'photo_dir' => true,
        'work_id' => true,
        'work' => true
    ],
    'properties' => [
        'id' => (int) 1,
        'photo' => 'arteviva.jpg',
        'photo_dir' => 'a4cd522c-b7b9-437a-99fc-0eb15827944f',
        'work_id' => (int) 1,
        'created' => object(Cake\I18n\Time) {

            'time' => '2015-05-08T20:25:07+0000',
            'timezone' => 'UTC',
            'fixedNowTime' => false

        },
        'modified' => null
    ],
    'dirty' => [],
    'original' => [],
    'virtual' => [],
    'errors' => [],
    'repository' => 'WorksImages'

}
相关问题