也許這個問題很簡單,但我不明白什麼是與yii2中的(),儘管我已經閱讀了幾篇關於它的文章。這是什麼意思:yii2 find() - 它是幹什麼用的?
$players = PlayersModel::find()->with("countries")->all();
這是幹什麼用的?在我的數據庫上能不能用什麼目的(其表相關的):
請告訴我這個功能的有用的方面:with()
也許這個問題很簡單,但我不明白什麼是與yii2中的(),儘管我已經閱讀了幾篇關於它的文章。這是什麼意思:yii2 find() - 它是幹什麼用的?
$players = PlayersModel::find()->with("countries")->all();
這是幹什麼用的?在我的數據庫上能不能用什麼目的(其表相關的):
請告訴我這個功能的有用的方面:with()
with()
在Yii 2 Guide解釋。
該方法允許在查詢中加載關係數據。
在你的例子中有PlayersModel
。我假設也有ClubsModel
表示來自數據庫表clubs
的數據。
假設玩家屬於其中一個俱樂部。應在0和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;
但這performes另一個SQL查詢 - 這就是所謂的延遲加載。
比方說,你知道你需要一次與他的俱樂部數據一起球員數據 - 您可以使用with()
得到這個:
$player = PlayersModel::find()->where(['id' => $id])->with('club')->one();
這是一個SQL查詢。現在,當你撥打:
$club = $player->club;
沒有必要第二次查詢這段時間,因爲這關係數據已經獲取 - 這就是所謂的預先加載。
太棒了!謝啦。 – Sherzod