从Cake php 3中的表链接和显示数据

时间:2019-04-26 18:59:05

标签: php cakephp-3.0 web-deployment-project

我正在尝试在我的jobs / index.ctp中显示类型表中的名称

不确定如何回显它,到目前为止,我已经写了这个

,但是它不起作用,但是也没有给出任何错误消息

class Jobs extends Table
{

    public function initialize(array $config)
    {
        parent::initialize($config);

        $this->setTable('jobs');
        $this->setDisplayField('title');
        $this->setPrimaryKey('id');

        $this->addBehavior('Timestamp');

        $this->belongsTo('Categories', [
            'foreignKey' => 'category_id',
            'joinType' => 'INNER'
        ]);
        $this->belongsTo('Users', [
            'foreignKey' => 'user_id',
            'joinType' => 'INNER'
        ]);
        $this->belongsTo('Types', [
            'foreignKey' => 'type_id',
            'joinType' => 'INNER'
        ]);
    }
class Types extends Table
{
    /**
     * Initialize method
     *
     * @param array $config The configuration for the Table.
     * @return void
     */
    public function initialize(array $config)
    {
        parent::initialize($config);

        $this->setTable('types');
        $this->setDisplayField('name');
        $this->setPrimaryKey('id');

        $this->hasMany('Jobs', [
            'foreignKey' => 'type_id'
        ]);
    }
<?php
foreach ($jobs as $jobs):
?>
<li>
    <div class="type"><span style="background:"> <?php echo $jobs['types']['name']; ?> </span></div>
    <div class="description">
        <h5><?php echo $jobs['title']; ?> (<?php echo $jobs['city']; ?> , <?php echo $jobs['postcode']; ?>)</h5>
        <h6><strong>company Name: <?php echo $jobs['company_name']; ?></strong></h6>
        <h6>Date Posted:<span id="list_date"> <?php echo $this->Time->Format($jobs['created'], "d MMMM y") ?> </span></h6>

这一切都在<?php echo $jobs['types']['name'] ;?>行之外进行

2 个答案:

答案 0 :(得分:0)

首先,您的foreach循环应为foreach ($jobs as $job)。请注意跟踪每个特定作业的变量的单数$job

在此单数注释之后,由于作业belongTo类型,因此每个作业只有一个类型,没有多个。结果,您正在寻找的价值是  $job['type']['name']$job->type->name也可能会起作用)。所有这些都假定您在加载记录时已正确使用了遏制;因此,为什么我也要求显示该代码。

如果Jobs具有许多类型,那么您将拥有$job['types'](或$job->types),这是可以迭代的Type实体的数组。

答案 1 :(得分:0)

要显示关联的表数据,您需要做三件事:

  1. 表中的关联

    $this->belongsTo('Types', [
        'foreignKey' => 'type_id',
        'joinType' => 'INNER'
    ]);
    
  2. 在控制器(JobsController)中,使用contain指定关联的表,

    public function index() {
        $jobs = $this->Jobs->find('all')->contain(['Types']);
        //set jobs variable to make it available in .ctp file 
    }
    
  3. 在Jobs / index.ctp文件中

    <?php echo $job['types']['name'] ;?>
    
相关问题