2015-11-26 2 views
1

База данных содержит следующие таблицы: posts, posts_authors и users.CakePHP 3 - Две петли foreach и связанные модели

  • posts table fields: идентификатор, имя, пробкового, содержание, создал, модифицированный, user_id (запись творца, не автор), и онлайн.

  • posts_authors table fields: идентификатор, POST_ID и user_id.

  • users table fields: идентификатор, имя, пробкового, электронная почта, пароль, COUNTRY_ID, аватар, создал, модифицированный и статус.

Я пытаюсь перечислить все должности и все автор для каждой должности, но я не знаю, как получить имя пользователей из их идентификаторов во втором цикле Еогеаспа.

КОД:

Мой Посмотреть

<?php foreach ($posts as $post): ?> 

    ... 

    <ul> 
    <?php foreach ($post->authors as $authors): ?> 
     <li><?= $authors->users[0]->name ?></li> 
    <?php endforeach; ?> 
    </ul> 

    ... 

<?php endforeach; ?> 

PostsAuthorsTable.php (модель)

... 

$this->belongsTo('Users'); 
$this->belongsTo('Posts'); 

... 

PostsTable.php (модель)

... 

$this->belongsToMany('Users', [ 
    'through' => 'PostsAuthors', 
]); 

... 

UsersTable.php (модель)

... 

$this->belongsToMany('Posts', [ 
    'through' => 'PostsAuthors', 
]); 

... 

PostsController.php (контроллер)

public function index() 
{ 
    $posts = $this->Posts->find('all', [ 
     'conditions' => ['Posts.online !=' => -1] 
    ])->order(['Posts.publication' => 'DESC'])->contain(['Users']); 

    $this->set(compact(['posts'])); 
} 
+0

хорошо, firts: как вы получаете массив '$ posts' в вашем контроллере? Тогда, если Post belogsToMany пользователи должны быть '$ post-> user' вместо' $ post-> author' – arilia

+0

@arilia Спасибо, что комментировали! Просто добавила 'PostsController.php' к моему вопросу. – Benoda

ответ

1

РЕШИТЬ!

<?php foreach ($posts as $post): ?> 

    ... 

    <ul> 
    <?php foreach ($post->users as $user): ?> 
     <li><?= $user->name ?></li> 
    <?php endforeach; ?> 
    </ul> 

    ... 

<?php endforeach; ?> 
Смежные вопросы