也许这个问题很简单,但我无法理解 yii2 中的 with() 是什么,尽管我已经阅读了几篇关于它的文章。这是什么意思:
$players = PlayersModel::find()->with("countries")->all();
这是干什么用的?在我的数据库中(表是相关的)它可以用于什么目的:
请告诉我这个功能的有用方面:with()
最佳答案
with()
在 Yii 2 Guide 中有解释.
此方法允许在您的查询中预先加载关系数据。
在您的示例中有 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();
或者(写起来更简单一点):
$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/