She*_*zod 2 database activerecord yii2
也许这个问题非常简单但是我无法理解yii2中的()是什么,尽管我已经阅读了几篇关于它的文章.这是什么意思:
$players = PlayersModel::find()->with("countries")->all();
Run Code Online (Sandbox Code Playgroud)
这个是来做什么的?在我的数据库(哪些表是相关的)中它可以用于什么目的:
请告诉我这个功能的有用方面: with()
with()在Yii 2指南中有解释.
此方法允许在查询中急切加载关系数据.
在你的例子中有PlayersModel.我假设还有ClubsModel代表数据库表中的数据clubs.
假设玩家属于其中一个俱乐部.PlayersModel和之间应该有明确的关系ClubsModel.如果在PlayersModel其中定义它可能是这样的:
public function getClub()
{
return $this->hasOne(ClubsModel::className(), ['id' => 'id_club']);
}
Run Code Online (Sandbox Code Playgroud)
所以现在有关系命名club.每次调用$model->club($model对象的位置PlayersModel)都会得到相关ClubsModel对象.
现在 - 当你寻找特定的玩家时:
$player = PlayersModel::find()->where(['id' => $id])->one();
Run Code Online (Sandbox Code Playgroud)
或者(写一点简单):
$player = PlayersModel::findOne($id);
Run Code Online (Sandbox Code Playgroud)
这是一个执行SQL查询.在下一步中,您希望获得此玩家的俱乐部 - 已经定义了关系,因此您可以致电:
$club = $player->club;
Run Code Online (Sandbox Code Playgroud)
但是这会执行另一个SQL查询 - 它被称为延迟加载.
假设您知道您需要将玩家数据与他的俱乐部数据一起使用 - 您可以使用with()以获得此信息:
$player = PlayersModel::find()->where(['id' => $id])->with('club')->one();
Run Code Online (Sandbox Code Playgroud)
这是一个SQL查询.现在你打电话的时候:
$club = $player->club;
Run Code Online (Sandbox Code Playgroud)
这次不需要第二次查询,因为已经获取了这个关系数据 - 它被称为急切加载.