View 显示父子关系yii2

View 显示父子关系yii2,view,parent-child,relationship,yii2,relation,View,Parent Child,Relationship,Yii2,Relation,我正在寻找一些方法来实现yii2的以下功能: 假设我们有以下结构: -作者表。 -书桌 每个作者->都写过一本或多本书 我想做的是在视图上显示作者的详细信息,在视图下显示作者所写的所有书籍的网格视图。之后,控制按钮为当前作者创建/删除新书,以及属于当前作者的书籍的网格视图。。。换句话说,就是主详细视图 我应该如何检索这些书的数据?来自同一控制器的作者 我已经在作者的模型中实现了作者和书籍之间的表关系 提前感谢,欢迎任何帮助 如果您的作者模型中存在以下关系: public function get

我正在寻找一些方法来实现yii2的以下功能:

假设我们有以下结构: -作者表。 -书桌

每个作者->都写过一本或多本书

我想做的是在视图上显示作者的详细信息,在视图下显示作者所写的所有书籍的网格视图。之后,控制按钮为当前作者创建/删除新书,以及属于当前作者的书籍的网格视图。。。换句话说,就是主详细视图

我应该如何检索这些书的数据?来自同一控制器的作者

我已经在作者的模型中实现了作者和书籍之间的表关系


提前感谢,欢迎任何帮助

如果您的作者模型中存在以下关系:

public function getBooks()
{
    return $this->hasMany(Books::className(), ['author_id' => 'id']);
}
声明关系后,获取关系数据就像访问由相应getter方法定义的组件属性一样简单:

$author = Author::findOne(1);
$books = $author->books;

我最后找到的解决方案是:

  • 在作者的控制器上,我修改了“查看”操作,因此我可以创建一个“books”activeDataprovider,然后通过“作者id”对其进行过滤:

    公共函数actionView($id) { //获取当前作者 $author=$this->findModel($id)

然后我可以在作者的视图上创建一个gridview,其中包含当前作者所写的书籍

    $books_search = new BookSearch();

    //get the related books for current author

 $written_books =  $books_search->search(['bookSearch'=>['id_author'=>$id]]);
        return $this->render('view', [
        'author' => $author,
        'books_search'=> $books_search,
        'books'=>$written_books,
    ]);
}