হ্যালো লারাভেল ৫ । ৪
- Installation
- লারাভেল আড্ডা
- প্রধান কাঠামো বিন্যাস
- থিম / ফ্রন্ট এণ্ড সেটআপ
- ডাটাবেস আলাপ - (Database)
- রিলেশনশিপ
- কন্ট্রোলার - Controller
- রাউটিং - Routing
- কালেকশনস - Collections
- ইলোকোয়েন্ট ও আর এম (Eloquent ORM)
- Eloquent Model
- ফাইল সিস্টেম / স্টোরেজ
- লারাভেল ডাস্ক - Laravel Dusk
- ভ্যালিডেশনস (Validations)
- নেমস্পেস - Namespace
- MVC
রিলেশনশিপ
হ্যালো লারাভেল !
রিলেশনশিপ কি?
আপনি রিলেশন অথবা আত্মীয়তার সাথে অবশ্যই জড়িত । একটা অবজেক্ট এর সাথে অন্য অবজেক্ট যে সম্পর্ক সেটাই হচ্ছে রিলেশিপ । লারাভেল এ একটা টেবিল এর সাথে অন্য টেবিল এর সম্পর্ক রিলেশনশিপ ।
রিলেশনশিপ গল্প
রুবির সাজানো সংসার , স্বামী মারা যাবার পর ছেলেদের আগলে রেখেছেন । তিন ছেলে এখন কম্পিউটার ইঞ্জিনিয়ার । বড় ছেলে হাবলু P1 এ সিনিয়র সফটওয়্যার ডেভেলপার , মেজ বাবলু জুমশেপার এ ওয়েব ডেভেলপার এবং ছোট ছেলে সালাম গ্রাফিক্স ডিজাইনার ।
ওয়ান টু ওয়ান রিলেশন
গল্পে আপনি পড়ছেন হাবলু ,বাবলু , সালাম এর মা রুবি । তিন জন ছেলে রুবি কে মা বলে সম্বোধন করে । সবার মা একজন এবং একটা মানুষ । মা বলে সম্বোধন করে শুধুমাত্র রুবি কে , ছেলের সাথে মা সম্পর্ক ওয়ান টূ ওয়ান রিলেশন ।
ওয়ান টু মেনি রিলেশন
রুবির তিন ছেলে এটা জানা আছে, রুবি একজন মানুষ হয়ে হাবলু ,বাবলু , সালাম তিন জনকে ছেলে বলে সম্বোধন করে , করবে এটাই চিরন্তন এটাই সত্য ,এটাই বাস্তব । মায়ের সাথে ছেলে সম্পর্ক টা হচ্ছে ওয়ান টু মেনি রিলেশন
মেনি টু মেনি রিলেশন
হাবলু ,বাবলু , সালাম এদের মধ্যে সম্পর্ক ভাই , এরা একে অন্যের ভাই । এটাই মেনি টু মেনি রিলেশন ।
Has Many Through
এটা এক ধরনের শর্টকাট এ রিলেশন করার মতো এবং অনেক গুলো রিলেশন একবারে নিক্ষেপ করা । আপনি মানব বন্ধন দেখেছেন , সেখানে এক জনের হাতের সাথে অন্য আরেক জনের হাত যুক্ত হয়ে বিশাল লাইন হয় । প্রথম আর শেষের মানুষ এর সংযোগ আছে না ?
প্রথম আর শেষের মানুষের হাত সংযুক্ত না , তারপর ও কিন্তু যুক্ত আছে । কেমনে যুক্ত , আক জনের সাথে অন্য জনের হাত সংযুক্ত হয়ে সব শেষের মানুষ সংযোগ হয়েছে ।
- যেহেতু গল্পে গল্পে লারাভেল শিখব , একটা ছোট্ট গল্প
পায়েলআরকেয়াদুই বোন । এইতো গত সপ্তাহেকেয়ারবিয়ে হয়েছেজাহিদএর সাথে । এতেকেয়াআরজাহিদএর একটারিলেশনহইছে । আচ্ছা বলেন তো ,পায়েলজাহিদএর কে? ?
পায়েল আর জাহিদ এর অটোমেটিক একটা রিলেশন হয়ে গেছে । সেটা হয়েছে কেয়ার জন্য ।
এই দুই গল্পে রিলেশনশিপ দেখানো হয়েছে , মজার ব্যাপার হল এখানে Foreign Key এর কথা তুলে ধরা হয়েছে ।
|
country_id । user_id এসব Foreign Key দিয়ে করা । Foreign Key টা এক নজর দেখে নিতে পারেন
এখন Has Many Through প্রয়োগ এর পালা , Country Model এ hasManyThrough এর মাধ্যমে Post অ্যান্ড User >> Model এর রিলেশন করা হয়েছে ।
|
এখন রিলেশন কেমন মজুবত যাচাই করতে হবে । যাচাই করার জন্য tinker এর ব্যবহার করেন , টার্মিনাল এ হিট করেনphp artisan tinker
|
পলিমোরফিক রিলেশনস
পলিমোরফিক রিলেশনস হচ্ছে বহুরুপী সম্পর্ক ।। আপনার আশেপাশে অনেক মানুষ আছে যারা বহু রুপী । আচ্ছা একটা গল্প বলি - সামিদ এবং রাহুল খুব ঘনিষ্ঠ বন্ধু । কোন কারনে তাদের মধ্যে বিরোধ দেখা দিয়েছে । ইমরান তাদের বন্ধু , কিন্তু ইমরান একটু হিংসুটে , সে তাদের এই বিরোধের সময় তা কাজে লাগাইছে । ইমরান সামিদ কে বলল দোস্ত রাহুল তো তোরে পচানি দিতাছে । আবার এই ইমরান ই রাহুল এর কাছে গিয়ে বলতাছে দোস্ত জানস সামিদ না আমাক তোর সাথে মিশতে না করছে । এতে করে সামিদ আর রাহুল এর বিরোধ টা আরও বেশি হল । এখানে ইমরান পলিমোরফিক বা বহু রুপী হিসেবে কাজ করলো ।
আপনি অনেক সাইটে দেখবেন পোস্ট এবং ভিডিও পোস্ট এর জন্য আলাদা আলাদা সিঙ্গেল পেজ ব্যবহার করা হয় । পোস্ট এবং ভিডিও পোস্ট দুই পেজে আপনি কমেন্ট করতে পারেন । আচ্ছা দুইটা আলাদা পেজের জন্য কি দুটা আলাদা কমেন্ট টেবিল বানাবেন ?? যেমন post_comments_table , video_post_comments_table
পলিমোরফিক রিলেশন দিয়ে শুধুমাত্র একটা টেবিল দিয়ে দুই পেজেই কমেন্ট কন্ট্রোল করতে পারবেন । আচ্ছা দেখুন কিভাবে পলিমোরফিক রিলেশন সেট করবেন – posts videos comments আপনার তিনটা টেবিল । comments টেবিল পলিমোরফিক বা বহুরূপী হিসেবে সেট করবেন ।
|
commentable_id এখানে সেভ হবে posts/videos id এবং commentable_type এ থাকবে টাইপ post অথবা video ।
এখন Model কেমন হবে দেখুন
|
সব সেট আপ করা হয়ে গেছে , একটু কাজ বাকি আছে Comment Model এ অ্যাড করে নিবেন ।
|
'post' => 'App\Post' এখানে 'টাইপ' => 'App\Post'
এবার দেখার পালা রিলেশন তা কেমন হল
|
|
মেনি টু মেনি পলিমোরফিক
আপনি পলিমোরফিক সেকশন এ একটা গল্প পরেছেন , সামিদ এবং রাহুল এর সেখানে পলিমোরফিক ( বহুরূপী ) হিসেবে ছিল ইমরান । এটা তো বুঝতে পেরেছেন বহুরূপী হিসেবে প্রকাশ করতে হইলে সর্ব নিম্ন দুজন মানুষ লাগে । একজন এর সাথে তো বহুরূপীতার পরিচয় দেওয়া যাবে না । দুই এর অধিক এর সাথে পলিমোরফিক দেখানো টা হচ্ছে মেনি টু মেনি পলিমোরফিক।
এখানে ৪ তা টেবিল posts videos tags taggables । ।
|
tag_id টা হচ্ছে tags id , taggable_id হচ্ছে posts/videos id , taggable_type হচ্ছে টাইপ video/post
Model Structure - মডেল বিন্যাসঃ
morphToManyমাধ্যমে মেনি টু মেনি পলিমোরফিক প্রকাশ করা হয় ।
|
|
|
|
আপনি পোস্ট ১ এর সকল ট্যাগ লিস্ট পাবেন ।
|
অনুরূপ ভাবে আপনি ভিডিও পোস্ট ১ এর সকল ট্যাগ লিস্ট পাবেন ।
- আপনি চাচ্ছেন কোন একটা ট্যাগ এ কতোগুলো পোস্ট আছে ।
|
|
Polymorphic Relations
The above syntax means the presence of the active class will be determined by the truthiness of the data property isActive.
You can have multiple classes toggled by having more fields in the object. In addition, the v-bind:class directive can also co-exist with the plain class attribute. So given the following template:
|
And the following data:
|
It will render:
|
When isActive or hasError changes, the class list will be updated accordingly. For example, if hasError becomes true, the class list will become "static active text-danger".
The bound object doesn’t have to be inline:
|
|
This will render the same result. We can also bind to a computed property that returns an object. This is a common and powerful pattern:
|
|
Array Syntax
We can pass an array to v-bind:class to apply a list of classes:
|
|
Which will render:
|
If you would like to also toggle a class in the list conditionally, you can do it with a ternary expression:
|
This will always apply errorClass, but will only apply activeClass when isActive is true.
However, this can be a bit verbose if you have multiple conditional classes. That’s why it’s also possible to use the object syntax inside array syntax:
|
With Components
This section assumes knowledge of Vue Components. Feel free to skip it and come back later.
When you use the class attribute on a custom component, those classes will be added to the component’s root element. Existing classes on this element will not be overwritten.
For example, if you declare this component:
|
Then add some classes when using it:
|
The rendered HTML will be:
|
The same is true for class bindings:
|
When isActive is truthy, the rendered HTML will be:
|
Binding Inline Styles
Object Syntax
The object syntax for v-bind:style is pretty straightforward - it looks almost like CSS, except it’s a JavaScript object. You can use either camelCase or kebab-case (use quotes with kebab-case) for the CSS property names:
|
|
It is often a good idea to bind to a style object directly so that the template is cleaner:
|
|
Again, the object syntax is often used in conjunction with computed properties that return objects.
Array Syntax
The array syntax for v-bind:style allows you to apply multiple style objects to the same element:
|
Auto-prefixing
When you use a CSS property that requires vendor prefixes in v-bind:style, for example transform, Vue will automatically detect and add appropriate prefixes to the applied styles.