2017-04-26 149 views
1

也許這個問題很簡單,但我不明白什麼是與yii2中的(),儘管我已經閱讀了幾篇關於它的文章。這是什麼意思:yii2 find() - 它是幹什麼用的?

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

這是幹什麼用的?在我的數據庫上能不能用什麼目的(其表相關的):

enter image description here

請告訴我這個功能的有用的方面:with()

回答

4

with()Yii 2 Guide解釋。

該方法允許在查詢中加載關係數據。

在你的例子中有PlayersModel。我假設也有ClubsModel表示來自數據庫表clubs的數據。

假設玩家屬於其中一個俱樂部。應在0​​和ClubsModel之間定義關係。如果在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; 

但這performes另一個SQL查詢 - 這就是所謂的延遲加載

比方說,你知道你需要一次與他的俱樂部數據一起球員數據 - 您可以使用with()得到這個:

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

這是一個SQL查詢。現在,當你撥打:

$club = $player->club; 

沒有必要第二次查詢這段時間,因爲這關係數據已經獲取 - 這就是所謂的預先加載

+0

太棒了!謝啦。 – Sherzod

相關問題