Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

Yii2 . में जंक्शन तालिका से डेटा पुनर्प्राप्त करें

संक्षेप में :ActiveRecord . का उपयोग करना आपके द्वारा सुझाए गए जंक्शन तालिका के लिए IMHO सही तरीका है क्योंकि आप via() सेट कर सकते हैं उस मौजूदा ActiveRecord . का उपयोग करने के लिए . यह आपको Yii के link() . का उपयोग करने की अनुमति देता है एक ही समय में डेटा (जैसे आपका व्यवस्थापक ध्वज) जोड़ते समय जंक्शन तालिका में आइटम बनाने की विधि।

आधिकारिक Yii गाइड 2.0 जंक्शन तालिका का उपयोग करने के दो तरीके बताता है:viaTable() . का उपयोग करना और via() . का उपयोग करना (देखें यहां ) जबकि पूर्व पैरामीटर के रूप में जंक्शन तालिका के नाम की अपेक्षा करता है, बाद वाला पैरामीटर के रूप में संबंध नाम की अपेक्षा करता है।

यदि आपको जंक्शन तालिका के अंदर डेटा तक पहुंच की आवश्यकता है तो मैं ActiveRecord . का उपयोग करूंगा जंक्शन तालिका के लिए जैसा आपने सुझाव दिया है और via() . का उपयोग करें :

class User extends ActiveRecord
{
    public function getUserGroups() {
        // one-to-many
        return $this->hasMany(UserGroup::className(), ['user_id' => 'id']);
    }
}

class Group extends ActiveRecord
{
    public function getUserGroups() {
        // one-to-many
        return $this->hasMany(UserGroup::className(), ['group_id' => 'id']);
    }

    public function getUsers()
    {
        // many-to-many: uses userGroups relation above which uses an ActiveRecord class
        return $this->hasMany(User::className(), ['id' => 'user_id'])
            ->via('userGroups');
    }
}

class UserGroup extends ActiveRecord
{
    public function getUser() {
        // one-to-one
        return $this->hasOne(User::className(), ['id' => 'user_id']);
    }

    public function getGroup() {
        // one-to-one
        return $this->hasOne(Group::className(), ['id' => 'userh_id']);
    }
}

इस तरह आप userGroups का उपयोग करके अतिरिक्त प्रश्नों के बिना जंक्शन तालिका का डेटा प्राप्त कर सकते हैं संबंध (किसी भी अन्य एक-से-अनेक संबंध की तरह):

$group = Group::find()->where(['id' => $id])->with('userGroups.user')->one();
// --> 3 queries: find group, find user_group, find user
// $group->userGroups contains data of the junction table, for example:
$isAdmin = $group->userGroups[0]->adminFlag
// and the user is also fetched:
$userName = $group->userGroups[0]->user->name

यह सब hasMany . का उपयोग करके किया जा सकता है संबंध। तो आप पूछ सकते हैं कि आपको via() . का उपयोग करके कई-से-अनेक संबंधों की घोषणा क्यों करनी चाहिए? :क्योंकि आप Yii के link() . का उपयोग कर सकते हैं जंक्शन तालिका में आइटम बनाने की विधि:

$userGroup = new UserGroup();
// load data from form into $userGroup and validate
if ($userGroup->load(Yii::$app->request->post()) && $userGroup->validate()) {
    // all data in $userGroup is valid
    // --> create item in junction table incl. additional data
    $group->link('users', $user, $userGroup->getDirtyAttributes())
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GUI का उपयोग करके MySQL कार्यक्षेत्र में वर्तमान कनेक्शन कैसे देखें?

  2. जहां MySQL में पंक्तियों को फ़िल्टर करने के लिए क्लॉज

  3. mysqli में ऑटो-इन्क्रीमेंट के रूप में आईडी के साथ डेटा डालने का उचित तरीका

  4. mysql में कमी मूल्य लेकिन नकारात्मक नहीं

  5. MySql:Tinyint (2) बनाम tinyint(1) - क्या अंतर है?