CakePHP 3在表之间创建关联

时间:2016-04-14 08:56:29

标签: cakephp cakephp-3.0

我的数据库中有两个表。这些工作被用作可用工作的列表,应该按照不同的业务类型进行分类。

作业

id(int) PRIMARY
title(varchar)
business_id(int)
start(datetime)
description(text)

业务

id(int) PRIMARY
name(varchar)

在工作索引中,我想显示所有工作及其类别的列表。但我仍然不愿意从作业控制器那里收到公司名称。

JobsTable.php

namespace App\Model\Table;

use Cake\ORM\Table;

class JobsTable extends Table
{
    public function initialize(array $config)
    {
        $this->addBehavior('Timestamp');
        $this->HasOne('Business', ['foreignKey' => 'business_id']);
    }
}

BusinessTable.php

namespace App\Model\Table;

use Cake\ORM\Table;

class BusinessTable extends Table
{
    public function initialize(array $config)
    {
        $this->hasMany('Jobs', ['foreignKey' => 'id']);
    }
}

JobsController.php

public function index()
    {
        $jobs = $this->Jobs->find('all');
        $this->set(compact('jobs'));
    }

如何使用JobsController中的业务表及其视图中的业务名称?

2 个答案:

答案 0 :(得分:1)

在你对乔布斯的看法中,你可以尝试这样的事情

foreach($jobs as $job) :

    echo $job->has('business') ? $this->Html->link($job->business->name, ['controller' => 'Businesses', 'action' => 'view', $job->business->id]) : ''

endforeach;

答案 1 :(得分:1)

感谢prats1411为他的快速召唤。

我最近找到了让它适合我的方法。如果有人能够提供更好的解决方案,我真的会建议。

在src / Model / Table / JobsTable.php中:

$this->belongsTo('Business', ['foreignKey' => 'business_id']);

在src / Controller / JobsController.php中:

$jobs = $this->Jobs->find('all')->contain('Business');

所以我最终可以在我的视图中显示带有$job->busines->name的商家名称。