不选择记录

时间:2015-03-07 15:59:31

标签: php mysql sql yii yii2

author   id  |  name            
         1       Mike
         2       Dive
         3       Stiv

book     id  |  title
         1       ABC
         2       War

book_author  id_book | id_author
             1         1      
             1         2
             2         3

app / models / Book.php

public function getAuthors()
{
  return $this->hasMany(Authors::className(), ['id' => 'id_author'])->viaTable('book_author',['id_book' => 'id']);
}

在视图中:

    foreach (Books::findAll([1, 2]) as $book)
    {
        echo sprintf('%s | %s',
            $book->title,implode(', ',
                $book->getAuthors()));
    }

始终返回 implode(): $ book-> getAuthors())中传递的参数无效;

getAuthors() - 没有选择作者,为什么?

需要:

ABC |迈克,潜水   战争| STIV

1 个答案:

答案 0 :(得分:1)

$book->getAuthors()获取对象数组。你应该得到简单的数组。试试这段代码:

foreach (Books::findAll([1, 2]) as $book)
    {
        $authors = ArrayHelper::toArray($book->getAuthors()->all(), [
         'app\models\Authors' => [
           'name', 'id'
         ]
        ]);
        echo sprintf('%s | %s',
            $book->title,implode(', ',
                ArrayHelper::map($authors, 'id', 'name')));
    }