yii2找到() - 它的用途是什么?

时间:2017-04-26 12:44:44

标签: database activerecord yii2

也许这个问题非常简单但我无法理解yii2中的 with(),尽管我已经阅读过几篇关于它的文章。这是什么意思:

$players = PlayersModel::find()->with("countries")->all();

这是为了什么?在我的数据库(哪些表是相关的)中可以使用它的目的:

enter image description here

请告诉我此功能的有用方面:with()

1 个答案:

答案 0 :(得分:8)

Yii 2 Guide中解释了

with()

此方法允许在查询中急切加载关系数据。

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

让我们说玩家属于其中一个俱乐部。 PlayersModelClubsModel之间应该有明确的关系。如果它在PlayersModel中定义,则可能类似于:

public function getClub()
{
    return $this->hasOne(ClubsModel::className(), ['id' => 'id_club']);
}

所以现在有一个名为club的关系。每次拨打$model->club(其中$modelPlayersModel的对象)时,您都会获得相关的ClubsModel个对象。

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

$player = PlayersModel::find()->where(['id' => $id])->one();

或(写一点简单):

$player = PlayersModel::findOne($id);

这是一个执行SQL查询。在下一步中,您希望获得此播放器的俱乐部 - 已经定义了关系,因此您可以致电:

$club = $player->club;

但是这会执行另一个SQL查询 - 它被称为延迟加载

让我们假设您知道您需要播放器数据以及他的俱乐部数据 - 您可以使用with()来获取此信息:

$player = PlayersModel::find()->where(['id' => $id])->with('club')->one();

这是一个SQL查询。现在打电话的时候:

$club = $player->club;

这次不需要第二次查询,因为已经提取了这个关系数据 - 它被称为急切加载