database - yii2 find with() - 它有什么用?

标签 database activerecord yii2

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

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

这是干什么用的?在我的数据库中(表是相关的)它可以用于什么目的:

enter image description here

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

最佳答案

with()Yii 2 Guide 中有解释.

此方法允许在您的查询中预先加载关系数据。

在您的示例中有 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;

这次不需要第二次查询,因为此关系数据已经获取 - 这称为预先加载

关于database - yii2 find with() - 它有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43634609/

相关文章:

ruby-on-rails - 如何在不知道其属性的情况下枚举 ActiveRecord 对象

ruby-on-rails - 为什么 association.build 不会将 parent_id 分配给它的 child ?

ruby-on-rails - Active Record Where Not bool 值 : true

css - Yii 2.0 在 renderPartial 中加载 css 和 js

php - 如何更改 Yii2 中所有 Controller 的默认布局?

mysql - 在 SQL 中连接多个表并执行算术

php - 如何从 PHP 发送固定值到数据库

mysql - 创建 phpmyadmin 用户仅用于选定的数据库访问

php - 无法访问 Yii2 供应商类

database - 使用 SQLWorkbench 列出 redshift 中的表