繁体   English   中英

如何在Yii2中仅通过1个联接查询获得多ActiveRecord模型?

[英]How to get multi activerecord model with only 1 join query in Yii2?

例如:

询问

 SELECT book.\*,author.* FROM book 
 INNER JOIN author ON author.id = book.author_id 
 WHERE book.id=1

获取模型

$modelBook = Book::find()->innerJoin('author','author.id = book.author_id')->where(['book.id'=>1])->one();
$modelAuthor = Author::findOne(['id'=>$modelBook->author_id]);

问题:

我如何只用一个mysql执行2 activerecord model BookAuthor

我知道我们可以使用with()函数,但是它花了另一个查询SELECT ...IN(...)来获取第二个模型,尽管我们从联接查询中获得了足够的数据

有没有更有效的解决方案?

ActiveRecord用于ActiveRecord类的模型扩展。您似乎正在使用查询而不是“模型”,所以我建议您使用activeDataProvider。

您可以使用getModels()函数引用由dataProvider管理的模型

       $provider = new SqlDataProvider([
         ......
    ]);



    // returns an array of data rows
    $models = $provider->getModels();

有关详细信息,请参见本指南和参考

http://www.yiiframework.com/doc-2.0/guide-output-data-providers.html http://www.yiiframework.com/doc-2.0/yii-data-sqldataprovider.html

尝试这个 :

在性能的情况下,使用方法并不慢。

$modelBook = Book::find()->with('YOUR_RELATION_NAME_HERE')->findByPK(id);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM