ארכיון תגיות: database

חיבור דינמי לדאטאבייסים רבים ב-Laravel

יש לי פרויקט שבו לכל יוזר יש דאטאבייס משלו.
עכשיו, תוך כדי ריצה, אני צריך להתחבר לדאטאבייס הנכון.
הפרויקט הוא על Laravel ( כיום 5).

אז השלב הראשון לפתרון העניין, הוא הוספה דינמית של הגדרה.
כלומר – כידוע, בדרך כלל ההגדרות של הדאטאבייסים ב-Laravel יושבות במערך שמוגדר בקובץ database.php בתיקית config.

עכשיו, כיוון שזאת הגדרה לכל דבר ועניין, אז laravel מאפשרת להוסיף הגדרות דינמיות , באמצעות המתודה Config::set.

אז ככה אני מגדיר דאטאבייס חדש , מה שנקרא "on the fly", כלומר תוך כדי ריצה :

 Config::set('database.connections.'.'YOUR KEY COME HERE', array(
            'driver'    => 'mysql',
            'host'      => env('DB_HOST', 'localhost'),
            'database'  => $this->dbName,
            'username'  => env('DB_USERNAME', 'root'),
            'password'  => env('DB_PASSWORD', 'YOUR PASSWORD COME HERE'),
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
                     ));

נא תשומת לב למספר נקודות :
1. השתמשתי ב-dot.notation, כלומר בתחביר של נקודה מפרידה, ו-Laravel יודעת להפריד אותו לבד.
2. המקום שבו סימנתי Your key come here – מיועד כמובן, כדי לתת שם יחודי ל-Connection הזה.

ועכשיו, אחרי שהגדרנו –
אז נשאר לבצע שאילתות.
אני אדגים על שאילתא בצורה גולמית, בלי להתייחס במאמר הזה ל-Eloquoent בינתיים.
אז נניח ואני רוצה לבצע שאילתת select על טבלת users באותו דאטאבייס שאליו התחברתי :
זה הולך ככה :

 $results = DB::connection($user->id)->select('select * from users where id > ?', [0]);

זהו, ראינו כאן איך להתחבר באופן דינמי לדאטאבייסים ב-laravel.
יום נעים
איל

16824283970_515f904232_laravel

המשך מדריך – עבודה בלאראוול עם דאטאבייסים רבים – שיתוף מודל Laravel Mulitiple Databases – Share your models

laravel share your model
Photo by nesimo

בהמשך למדריך הקודם – שבו הראתי איך מתחברים לדאטבייסים שונים, תוך כדי ריצה (on the fly).

עכשיו החלק הבא – הוא לראות איך יוצרים מודל אחד – אבל משתמשים בו בדאטאבייסים שרלוונטי באותו רגע ליוזר.

אז ב-Laravel זה ממש פשוט.

אחת המתודות של המודל שאפשר לשרשר, היא on והיא קובעת לאיזה דאטאבייס מתייחסים , פשוט עם שם הדאטאבייס הרלוונטי.

אז יוצרים את המודל – לגמרי כרגיל.

וניגשים אליו , נניח עם count , בצורה הבאה :

 $results = AppPolicy::on($user->id)->where('PolicyInitialNum', '>', 0)->count();

בדוגמא שהבאתי המודל נקרא כמובן Policy.
ובאותה צורה אפשר לגשת לכל מודל שרוצים.

בהצלחה!