2015-05-15 7 views
0

Я связал две модели после официальной документации CakePHP 3 и не могу вернуть значения одного из них в виде (Шаблон).CakePHP 3 - взаимосвязь между моделями

Кодекс:

Работа - Entity

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 - Entity

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 - Контроллер:

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' 
     ]); 
    } 

Портфолио - Просмотр (Template)

<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 не возвращает ошибки в представлении.

Я не могу понять, что не так.

Благодарим заранее любую помощь.

Спасибо.

+0

Что является результатом делать 'отладки ($ работы-> works_image)'? –

+0

Что вы хотите вернуть? Если я читаю ваш код в шаблоне.

work_id?>

Вы хотите вернуть изображение работы? –

ответ

0

В цикле Еогеасп (отладка ($ работы-> 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' 

} 
Смежные вопросы