В общем имеется 2 таблицы
book и genre
и между ними связь много ко многим, соот-о добавляю pivot table genre-book
и чтоб делать стандартные вызовы приходится вызывать вечно $model->genres, - это если из модели book вызываю, но что если мне приходится искать книги из жанров, соответство для вывода я в виджет буду передавать function some( Book $item ) и получается что туда приходит модель зависимой таблицы GenreBook
и приходится писать $model->book->title
как можно обходить вызов book при этом иметь нужные данные?
пример отрывка из моего кода RecomendedBook:
public function renderItem($item)
{
$title = $item->book->title();
$cardContent = '';
$imgSrc = '/img/book-thumb/'.rand(1,100).'.jpg';
$author = $item->book->author()[0]['first-name'].' '.$item->book->author()[0]['last-name'];
$cardContent .= Html::img($imgSrc,['class' => 'card-img-top']);
$cardContent .= Html::tag('h4',$title,['class' => 'card-title']);
$cardContent .= Html::tag('small',$author,['class' => 'text-muted']);
$cardDiv = Html::tag('div',$cardContent,['class' => 'card-block']);
return Html::a($cardDiv,['book/'.$item->book->url],$this->cardOptions);
}
Составление dataProvider:
$model = Book::find()->where( [ 'url' => $url ] )->limit( 1 )->one();
foreach ( $model->genres() as $genre ) {
$search = new GenreBookSearch();
$dataProvider[$genre['@attributes']['title']] = $search->search(Yii::$app->request->queryParams);
$dataProvider[$genre['@attributes']['title']]->query->andWhere(['genre_id' => $genre['@attributes']['id']]);
}
собственно вопрос, если я буду использовать эту гадость вроде $model->book->title()
то при попытке передать автора книги, мне придется составлять точные копии зависимостей, правильно ли это и как можно это все осознать.
Заранее благодарю!