Связывание и отображение данных из таблиц в торт PHP 3 - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь отобразить имена из таблицы типов в моих заданиях / 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 голосов
/ 28 апреля 2019

Для отображения связанных данных таблицы вам нужно 3 вещи:

  1. Ассоциация в таблице,

    $this->belongsTo('Types', [
        'foreignKey' => 'type_id',
        'joinType' => 'INNER'
    ]);
    
  2. В контроллере (JobsController) укажите связанную таблицу, используя параметр содержать,

    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'] ;?>
    
0 голосов
/ 26 апреля 2019

Во-первых, ваш foreach цикл должен быть foreach ($jobs as $job).Обратите внимание на единственное число $job для переменной, которая отслеживает каждое конкретное задание.

После этой особой заметки, поскольку задания belongTo Типы, для каждого задания существует только один тип, а не несколько.В результате значение, которое вы ищете, равно $job['type']['name'] ($job->type->name, скорее всего, также будет работать).Все это предполагает, что вы правильно использовали ограничение при загрузке записи;поэтому я попросил показать этот код тоже.

Если бы у Джобса было много типов, то у вас был бы $job['types'] (или $job->types), который был бы массивом объектов типа, которые вы могли быперебрать.

...