Переменные контроллера HABTM не загружаются в поле зрения - PullRequest
0 голосов
/ 27 июня 2019

У меня есть две родственные модели в ассоциации HasAndBelongsToMany: в подкатегории много Paquetes, в Paquete много подкатегорий.

На моей странице подкатегории мне нужно загрузить связанные paketes, и в соответствии с моей панелью инструментов debug-kitпеременные загружаются правильно.Проблема в том, что вид показывает мне код ошибки «неопределенное свойство».Я уверен, что что-то упустил, но не могу понять, в чем проблема.

Мои модели:

class SubcategoriasTable extends Table
{

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

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

        $this->addBehavior('Timestamp');

    $this->belongsTo('Categorias', [
            'foreignKey' => 'categoria_id',
            'joinType' => 'INNER'
        ]);

    $this->belongsToMany('Paquetes');
    }
}

class PaquetesTable extends Table
{

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

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

        $this->addBehavior('Timestamp');

        $this->belongsToMany('Subcategorias', [
            'foreignKey' => 'paquete_id',
            'targetForeignKey' => 'subcategoria_id',
            'joinTable' => 'paquetes_subcategorias',
        'dependant' => false
        ]);
    }
}

Контроллер, с которым у меня проблемы:

namespace App\Controller;

use App\Controller\AppController;
use Cake\ORM\Query;

class SubcategoriasController extends AppController
{

    public function content($slug = null)
    {
    $subcategory = $this->Subcategorias
            ->findBySlug($slug)
            ->select(['title', 'id'])
            ->contain('Paquetes', function (Query $q) {
                return $q
                    ->select(['name', 'slug','cost','currency'])
                    ->where(['Paquetes.status' => true]);
            });

    $this->set(compact('subcategory',$subcategory));
    }
}

Соответствующий шаблон представления (content.ctp):

<?php
    $subcategoryName = $subcategory->title;
    $title = $subcategoryName;
    $this->assign('title', $title); 
?>

<h1><?= $title ?></h1>
<?php foreach($subcategory->paquetes as $paquete) : ?>
    <!-- Each Paquete's loaded fields. -->
<?php endforeach; ?>

Пока я получаю следующее сообщение об ошибке:

Notice (8): Undefined property: Cake\ORM\Query::$title [APP/Template\Subcategorias\content.ctp, line 2]

1 Ответ

0 голосов
/ 27 июня 2019

Вы никогда не вызываете first() или firstOrFail() для созданного вами запроса, поэтому, на ваш взгляд, $subcategory по-прежнему является просто объектом запроса, а не сущностью.

Вы, вероятно, имели в виду:

$subcategory = $this->Subcategorias
    ->findBySlug($slug)
    ->select(['title', 'id'])
    ->contain('Paquetes', function (Query $q) {
        return $q
            ->select(['name', 'slug','cost','currency'])
            ->where(['Paquetes.status' => true]);
    })
->firstOrFail(); // This is the line that fetches the result and marshals it into an Subcategorias Entity 
...