Database yii2使用()查找-它用于什么?

Database yii2使用()查找-它用于什么?,database,activerecord,yii2,Database,Activerecord,Yii2,也许这个问题很简单,但我无法理解yii2中的with()是什么,尽管我读了几篇关于它的文章。这意味着什么: $players = PlayersModel::find()->with("countries")->all(); 这是干什么用的?在我的数据库中(表是相关的),它可以用于什么目的: 请向我展示此功能的有用方面:with()with()在中进行了说明 此方法允许在查询中快速加载关系数据 在您的示例中有PlayersModel。我假设还有ClubsModel表示数据库表cl

也许这个问题很简单,但我无法理解yii2中的with()是什么,尽管我读了几篇关于它的文章。这意味着什么:

$players = PlayersModel::find()->with("countries")->all();
这是干什么用的?在我的数据库中(表是相关的),它可以用于什么目的:

请向我展示此功能的有用方面:
with()
with()
在中进行了说明

此方法允许在查询中快速加载关系数据

在您的示例中有
PlayersModel
。我假设还有
ClubsModel
表示数据库表
clubs
中的数据

假设这位球员属于其中一家俱乐部。
PlayersModel
ClubsModel
之间应该有定义的关系。如果它是在
PlayersModel
中定义的,那么它可能类似于:

public function getClub()
{
    return $this->hasOne(ClubsModel::className(), ['id' => 'id_club']);
}
因此,现在有一个名为
club
的关系。每次调用
$model->club
(其中
$model
PlayersModel
的对象)都会得到相关的
ClubsModel
对象

现在-当您寻找特定玩家时:

$player = PlayersModel::find()->where(['id' => $id])->one();
或者(写起来稍微简单一点):

这是一个执行的SQL查询。在下一步中,您希望获得该球员的俱乐部-已经定义了关系,因此您可以调用:

$club = $player->club;
但这会执行另一个SQL查询—它被称为延迟加载

假设你知道你需要球员数据和他的俱乐部数据,你可以使用
with()
来获得:

$player = PlayersModel::find()->where(['id' => $id])->with('club')->one();
这是一个SQL查询。现在当你打电话时:

$club = $player->club;
这一次不需要进行第二次查询,因为已经获取了该关系数据-它被称为急切加载

$club = $player->club;