<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.ta.in.th/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tata</id>
	<title>Ta Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ta.in.th/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tata"/>
	<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php/Special:Contributions/Tata"/>
	<updated>2026-05-02T15:25:55Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.33.0-alpha</generator>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Courseville_Project_Resources&amp;diff=157</id>
		<title>Courseville Project Resources</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Courseville_Project_Resources&amp;diff=157"/>
		<updated>2019-06-10T03:07:41Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Resources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Docker ==&lt;br /&gt;
* [[https://bitpress.io/simple-approach-using-docker-with-php/?fbclid=IwAR0psAfTg9hjJGYJf9XFjmhkdWt9IytV_qEOKZhY5RKp6DdWJB896G-_uYs My Simple Approach to using Docker and PHP]]&lt;br /&gt;
&lt;br /&gt;
== Laravel ==&lt;br /&gt;
=== Resources ===&lt;br /&gt;
* [[https://ollieread.com/blog/2018/08/16/laravel-rbac-role-based-access-control-without-over-engineering?fbclid=IwAR1-E0rVNRct3VpMby6_8b4TcnuSVa96y252rN1wcvKJ6guW54uyLXrFB2s https://ollieread.com/blog/2018/08/16/laravel-rbac-role-based-access-control-without-over-engineering?fbclid=IwAR1-E0rVNRct3VpMby6_8b4TcnuSVa96y252rN1wcvKJ6guW54uyLXrFB2s]]&lt;br /&gt;
* [[https://www.sitepoint.com/eloquents-polymorphic-relationships-explained/?fbclid=IwAR1vGv59a-NVbqt9Jeqk6GbvI00u0EPSfxS-0boFjsHRzmRmBFGKXL7EP0w https://www.sitepoint.com/eloquents-polymorphic-relationships-explained/?fbclid=IwAR1vGv59a-NVbqt9Jeqk6GbvI00u0EPSfxS-0boFjsHRzmRmBFGKXL7EP0w]]&lt;br /&gt;
&lt;br /&gt;
=== Deploying ===&lt;br /&gt;
* [[https://devmarketer.io/learn/setup-laravel-project-cloned-github-com/ How to Setup a Laravel Project You Cloned from Github.com]]&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
composer install&lt;br /&gt;
npm install&lt;br /&gt;
cp .env.example .env&lt;br /&gt;
php artisan key:generate&lt;br /&gt;
php artisan migrate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OAUTH ===&lt;br /&gt;
* [[https://blog.pusher.com/make-an-oauth2-server-using-laravel-passport/ Make an OAuth2 server using Laravel Passport]]&lt;br /&gt;
* [[https://medium.com/modulr/create-api-authentication-with-passport-of-laravel-5-6-1dc2d400a7f Create API Rest with Laravel 5.6 Passport Authentication (Part 1)]]&lt;br /&gt;
* [[https://laravel.com/docs/5.8/passport Laravel Passport]] (OAUTH Library)&lt;br /&gt;
&lt;br /&gt;
=== Errors ===&lt;br /&gt;
* [[https://laravel-news.com/laravel-5-4-key-too-long-error Specified key was too long error]]&lt;br /&gt;
&lt;br /&gt;
=== Tutorials (Thai) ===&lt;br /&gt;
* Mos Programmer&lt;br /&gt;
** Part 0: [[https://medium.com/@mosprogramer/laravel-แล้วนายกับฉันก็ได้เจอกัน-cf62018531af https://medium.com/@mosprogramer/laravel-แล้วนายกับฉันก็ได้เจอกัน-cf62018531af]]&lt;br /&gt;
** Part 1: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-1-26bb954ac085 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-1-26bb954ac085]]&lt;br /&gt;
** Part 2: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-2-c1d038889ec3 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-2-c1d038889ec3]]&lt;br /&gt;
** Part 3: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-3-d0f58a4ca880 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-3-d0f58a4ca880]]&lt;br /&gt;
** Part 4: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-4-531f2c9dabe9 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-4-531f2c9dabe9]]&lt;br /&gt;
** Part 5: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-5-cb9f8f231dd5 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-5-cb9f8f231dd5]]&lt;br /&gt;
** Part 6: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-6-57283e8cb600 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-6-57283e8cb600]]&lt;br /&gt;
** Part 7: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-7-428156b6858a https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-7-428156b6858a]]&lt;br /&gt;
&lt;br /&gt;
== S3 ==&lt;br /&gt;
* [[http://checkbox.resources.s3.amazonaws.com/documentation/v6/User%20Permissions%20Guide/User_Permissions_Guide.html?fbclid=IwAR0Q2fcc8S8U2l-wHrbg_nYYuFrhqdH41wrMIW-N9ktp9jLKHOpkG9CmZp0 User Permissions Guide]]&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Courseville_Project_Resources&amp;diff=156</id>
		<title>Courseville Project Resources</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Courseville_Project_Resources&amp;diff=156"/>
		<updated>2019-05-30T02:15:21Z</updated>

		<summary type="html">&lt;p&gt;Tata: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Docker ==&lt;br /&gt;
* [[https://bitpress.io/simple-approach-using-docker-with-php/?fbclid=IwAR0psAfTg9hjJGYJf9XFjmhkdWt9IytV_qEOKZhY5RKp6DdWJB896G-_uYs My Simple Approach to using Docker and PHP]]&lt;br /&gt;
&lt;br /&gt;
== Laravel ==&lt;br /&gt;
=== Resources ===&lt;br /&gt;
* [[https://ollieread.com/blog/2018/08/16/laravel-rbac-role-based-access-control-without-over-engineering?fbclid=IwAR1-E0rVNRct3VpMby6_8b4TcnuSVa96y252rN1wcvKJ6guW54uyLXrFB2s https://ollieread.com/blog/2018/08/16/laravel-rbac-role-based-access-control-without-over-engineering?fbclid=IwAR1-E0rVNRct3VpMby6_8b4TcnuSVa96y252rN1wcvKJ6guW54uyLXrFB2s]]&lt;br /&gt;
&lt;br /&gt;
=== Deploying ===&lt;br /&gt;
* [[https://devmarketer.io/learn/setup-laravel-project-cloned-github-com/ How to Setup a Laravel Project You Cloned from Github.com]]&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
composer install&lt;br /&gt;
npm install&lt;br /&gt;
cp .env.example .env&lt;br /&gt;
php artisan key:generate&lt;br /&gt;
php artisan migrate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OAUTH ===&lt;br /&gt;
* [[https://blog.pusher.com/make-an-oauth2-server-using-laravel-passport/ Make an OAuth2 server using Laravel Passport]]&lt;br /&gt;
* [[https://medium.com/modulr/create-api-authentication-with-passport-of-laravel-5-6-1dc2d400a7f Create API Rest with Laravel 5.6 Passport Authentication (Part 1)]]&lt;br /&gt;
* [[https://laravel.com/docs/5.8/passport Laravel Passport]] (OAUTH Library)&lt;br /&gt;
&lt;br /&gt;
=== Errors ===&lt;br /&gt;
* [[https://laravel-news.com/laravel-5-4-key-too-long-error Specified key was too long error]]&lt;br /&gt;
&lt;br /&gt;
=== Tutorials (Thai) ===&lt;br /&gt;
* Mos Programmer&lt;br /&gt;
** Part 0: [[https://medium.com/@mosprogramer/laravel-แล้วนายกับฉันก็ได้เจอกัน-cf62018531af https://medium.com/@mosprogramer/laravel-แล้วนายกับฉันก็ได้เจอกัน-cf62018531af]]&lt;br /&gt;
** Part 1: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-1-26bb954ac085 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-1-26bb954ac085]]&lt;br /&gt;
** Part 2: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-2-c1d038889ec3 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-2-c1d038889ec3]]&lt;br /&gt;
** Part 3: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-3-d0f58a4ca880 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-3-d0f58a4ca880]]&lt;br /&gt;
** Part 4: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-4-531f2c9dabe9 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-4-531f2c9dabe9]]&lt;br /&gt;
** Part 5: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-5-cb9f8f231dd5 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-5-cb9f8f231dd5]]&lt;br /&gt;
** Part 6: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-6-57283e8cb600 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-6-57283e8cb600]]&lt;br /&gt;
** Part 7: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-7-428156b6858a https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-7-428156b6858a]]&lt;br /&gt;
&lt;br /&gt;
== S3 ==&lt;br /&gt;
* [[http://checkbox.resources.s3.amazonaws.com/documentation/v6/User%20Permissions%20Guide/User_Permissions_Guide.html?fbclid=IwAR0Q2fcc8S8U2l-wHrbg_nYYuFrhqdH41wrMIW-N9ktp9jLKHOpkG9CmZp0 User Permissions Guide]]&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Courseville_Project_Resources&amp;diff=155</id>
		<title>Courseville Project Resources</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Courseville_Project_Resources&amp;diff=155"/>
		<updated>2019-05-27T07:04:28Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Deploying */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Docker ==&lt;br /&gt;
* [[https://bitpress.io/simple-approach-using-docker-with-php/?fbclid=IwAR0psAfTg9hjJGYJf9XFjmhkdWt9IytV_qEOKZhY5RKp6DdWJB896G-_uYs My Simple Approach to using Docker and PHP]]&lt;br /&gt;
&lt;br /&gt;
== Laravel ==&lt;br /&gt;
=== Resources ===&lt;br /&gt;
* [[https://ollieread.com/blog/2018/08/16/laravel-rbac-role-based-access-control-without-over-engineering?fbclid=IwAR1-E0rVNRct3VpMby6_8b4TcnuSVa96y252rN1wcvKJ6guW54uyLXrFB2s https://ollieread.com/blog/2018/08/16/laravel-rbac-role-based-access-control-without-over-engineering?fbclid=IwAR1-E0rVNRct3VpMby6_8b4TcnuSVa96y252rN1wcvKJ6guW54uyLXrFB2s]]&lt;br /&gt;
&lt;br /&gt;
=== Deploying ===&lt;br /&gt;
* [[https://devmarketer.io/learn/setup-laravel-project-cloned-github-com/ How to Setup a Laravel Project You Cloned from Github.com]]&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
composer install&lt;br /&gt;
npm install&lt;br /&gt;
cp .env.example .env&lt;br /&gt;
php artisan key:generate&lt;br /&gt;
php artisan migrate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OAUTH ===&lt;br /&gt;
* [[https://blog.pusher.com/make-an-oauth2-server-using-laravel-passport/ Make an OAuth2 server using Laravel Passport]]&lt;br /&gt;
* [[https://medium.com/modulr/create-api-authentication-with-passport-of-laravel-5-6-1dc2d400a7f Create API Rest with Laravel 5.6 Passport Authentication (Part 1)]]&lt;br /&gt;
* [[https://laravel.com/docs/5.8/passport Laravel Passport]] (OAUTH Library)&lt;br /&gt;
&lt;br /&gt;
=== Errors ===&lt;br /&gt;
* [[https://laravel-news.com/laravel-5-4-key-too-long-error Specified key was too long error]]&lt;br /&gt;
&lt;br /&gt;
=== Tutorials (Thai) ===&lt;br /&gt;
* Mos Programmer&lt;br /&gt;
** Part 0: [[https://medium.com/@mosprogramer/laravel-แล้วนายกับฉันก็ได้เจอกัน-cf62018531af https://medium.com/@mosprogramer/laravel-แล้วนายกับฉันก็ได้เจอกัน-cf62018531af]]&lt;br /&gt;
** Part 1: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-1-26bb954ac085 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-1-26bb954ac085]]&lt;br /&gt;
** Part 2: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-2-c1d038889ec3 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-2-c1d038889ec3]]&lt;br /&gt;
** Part 3: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-3-d0f58a4ca880 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-3-d0f58a4ca880]]&lt;br /&gt;
** Part 4: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-4-531f2c9dabe9 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-4-531f2c9dabe9]]&lt;br /&gt;
** Part 5: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-5-cb9f8f231dd5 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-5-cb9f8f231dd5]]&lt;br /&gt;
** Part 6: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-6-57283e8cb600 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-6-57283e8cb600]]&lt;br /&gt;
** Part 7: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-7-428156b6858a https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-7-428156b6858a]]&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Courseville_Project_Resources&amp;diff=154</id>
		<title>Courseville Project Resources</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Courseville_Project_Resources&amp;diff=154"/>
		<updated>2019-05-27T07:04:14Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Laravel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Docker ==&lt;br /&gt;
* [[https://bitpress.io/simple-approach-using-docker-with-php/?fbclid=IwAR0psAfTg9hjJGYJf9XFjmhkdWt9IytV_qEOKZhY5RKp6DdWJB896G-_uYs My Simple Approach to using Docker and PHP]]&lt;br /&gt;
&lt;br /&gt;
== Laravel ==&lt;br /&gt;
=== Resources ===&lt;br /&gt;
* [[https://ollieread.com/blog/2018/08/16/laravel-rbac-role-based-access-control-without-over-engineering?fbclid=IwAR1-E0rVNRct3VpMby6_8b4TcnuSVa96y252rN1wcvKJ6guW54uyLXrFB2s https://ollieread.com/blog/2018/08/16/laravel-rbac-role-based-access-control-without-over-engineering?fbclid=IwAR1-E0rVNRct3VpMby6_8b4TcnuSVa96y252rN1wcvKJ6guW54uyLXrFB2s]]&lt;br /&gt;
&lt;br /&gt;
=== Deploying ===&lt;br /&gt;
* [[https://devmarketer.io/learn/setup-laravel-project-cloned-github-com/ How to Setup a Laravel Project You Cloned from Github.com]]&lt;br /&gt;
** &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
composer install&lt;br /&gt;
npm install&lt;br /&gt;
cp .env.example .env&lt;br /&gt;
php artisan key:generate&lt;br /&gt;
php artisan migrate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OAUTH ===&lt;br /&gt;
* [[https://blog.pusher.com/make-an-oauth2-server-using-laravel-passport/ Make an OAuth2 server using Laravel Passport]]&lt;br /&gt;
* [[https://medium.com/modulr/create-api-authentication-with-passport-of-laravel-5-6-1dc2d400a7f Create API Rest with Laravel 5.6 Passport Authentication (Part 1)]]&lt;br /&gt;
* [[https://laravel.com/docs/5.8/passport Laravel Passport]] (OAUTH Library)&lt;br /&gt;
&lt;br /&gt;
=== Errors ===&lt;br /&gt;
* [[https://laravel-news.com/laravel-5-4-key-too-long-error Specified key was too long error]]&lt;br /&gt;
&lt;br /&gt;
=== Tutorials (Thai) ===&lt;br /&gt;
* Mos Programmer&lt;br /&gt;
** Part 0: [[https://medium.com/@mosprogramer/laravel-แล้วนายกับฉันก็ได้เจอกัน-cf62018531af https://medium.com/@mosprogramer/laravel-แล้วนายกับฉันก็ได้เจอกัน-cf62018531af]]&lt;br /&gt;
** Part 1: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-1-26bb954ac085 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-1-26bb954ac085]]&lt;br /&gt;
** Part 2: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-2-c1d038889ec3 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-2-c1d038889ec3]]&lt;br /&gt;
** Part 3: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-3-d0f58a4ca880 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-3-d0f58a4ca880]]&lt;br /&gt;
** Part 4: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-4-531f2c9dabe9 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-4-531f2c9dabe9]]&lt;br /&gt;
** Part 5: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-5-cb9f8f231dd5 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-5-cb9f8f231dd5]]&lt;br /&gt;
** Part 6: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-6-57283e8cb600 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-6-57283e8cb600]]&lt;br /&gt;
** Part 7: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-7-428156b6858a https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-7-428156b6858a]]&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Courseville_Project_Resources&amp;diff=153</id>
		<title>Courseville Project Resources</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Courseville_Project_Resources&amp;diff=153"/>
		<updated>2019-05-24T07:58:00Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Laravel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Docker ==&lt;br /&gt;
* [[https://bitpress.io/simple-approach-using-docker-with-php/?fbclid=IwAR0psAfTg9hjJGYJf9XFjmhkdWt9IytV_qEOKZhY5RKp6DdWJB896G-_uYs My Simple Approach to using Docker and PHP]]&lt;br /&gt;
&lt;br /&gt;
== Laravel ==&lt;br /&gt;
=== Resources ===&lt;br /&gt;
* [[https://ollieread.com/blog/2018/08/16/laravel-rbac-role-based-access-control-without-over-engineering?fbclid=IwAR1-E0rVNRct3VpMby6_8b4TcnuSVa96y252rN1wcvKJ6guW54uyLXrFB2s https://ollieread.com/blog/2018/08/16/laravel-rbac-role-based-access-control-without-over-engineering?fbclid=IwAR1-E0rVNRct3VpMby6_8b4TcnuSVa96y252rN1wcvKJ6guW54uyLXrFB2s]]&lt;br /&gt;
&lt;br /&gt;
=== Deploying ===&lt;br /&gt;
* [[https://devmarketer.io/learn/setup-laravel-project-cloned-github-com/ How to Setup a Laravel Project You Cloned from Github.com]]&lt;br /&gt;
&lt;br /&gt;
=== OAUTH ===&lt;br /&gt;
* [[https://blog.pusher.com/make-an-oauth2-server-using-laravel-passport/ Make an OAuth2 server using Laravel Passport]]&lt;br /&gt;
* [[https://medium.com/modulr/create-api-authentication-with-passport-of-laravel-5-6-1dc2d400a7f Create API Rest with Laravel 5.6 Passport Authentication (Part 1)]]&lt;br /&gt;
* [[https://laravel.com/docs/5.8/passport Laravel Passport]] (OAUTH Library)&lt;br /&gt;
&lt;br /&gt;
=== Errors ===&lt;br /&gt;
* [[https://laravel-news.com/laravel-5-4-key-too-long-error Specified key was too long error]]&lt;br /&gt;
&lt;br /&gt;
=== Tutorials (Thai) ===&lt;br /&gt;
* Mos Programmer&lt;br /&gt;
** Part 0: [[https://medium.com/@mosprogramer/laravel-แล้วนายกับฉันก็ได้เจอกัน-cf62018531af https://medium.com/@mosprogramer/laravel-แล้วนายกับฉันก็ได้เจอกัน-cf62018531af]]&lt;br /&gt;
** Part 1: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-1-26bb954ac085 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-1-26bb954ac085]]&lt;br /&gt;
** Part 2: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-2-c1d038889ec3 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-2-c1d038889ec3]]&lt;br /&gt;
** Part 3: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-3-d0f58a4ca880 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-3-d0f58a4ca880]]&lt;br /&gt;
** Part 4: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-4-531f2c9dabe9 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-4-531f2c9dabe9]]&lt;br /&gt;
** Part 5: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-5-cb9f8f231dd5 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-5-cb9f8f231dd5]]&lt;br /&gt;
** Part 6: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-6-57283e8cb600 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-6-57283e8cb600]]&lt;br /&gt;
** Part 7: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-7-428156b6858a https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-7-428156b6858a]]&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Courseville_Project_Resources&amp;diff=152</id>
		<title>Courseville Project Resources</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Courseville_Project_Resources&amp;diff=152"/>
		<updated>2019-05-22T03:49:51Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Tutorials (Thai) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Docker ==&lt;br /&gt;
* [[https://bitpress.io/simple-approach-using-docker-with-php/?fbclid=IwAR0psAfTg9hjJGYJf9XFjmhkdWt9IytV_qEOKZhY5RKp6DdWJB896G-_uYs My Simple Approach to using Docker and PHP]]&lt;br /&gt;
&lt;br /&gt;
== Laravel ==&lt;br /&gt;
=== Deploying ===&lt;br /&gt;
* [[https://devmarketer.io/learn/setup-laravel-project-cloned-github-com/ How to Setup a Laravel Project You Cloned from Github.com]]&lt;br /&gt;
&lt;br /&gt;
=== OAUTH ===&lt;br /&gt;
* [[https://blog.pusher.com/make-an-oauth2-server-using-laravel-passport/ Make an OAuth2 server using Laravel Passport]]&lt;br /&gt;
* [[https://medium.com/modulr/create-api-authentication-with-passport-of-laravel-5-6-1dc2d400a7f Create API Rest with Laravel 5.6 Passport Authentication (Part 1)]]&lt;br /&gt;
* [[https://laravel.com/docs/5.8/passport Laravel Passport]] (OAUTH Library)&lt;br /&gt;
&lt;br /&gt;
=== Errors ===&lt;br /&gt;
* [[https://laravel-news.com/laravel-5-4-key-too-long-error Specified key was too long error]]&lt;br /&gt;
&lt;br /&gt;
=== Tutorials (Thai) ===&lt;br /&gt;
* Mos Programmer&lt;br /&gt;
** Part 0: [[https://medium.com/@mosprogramer/laravel-แล้วนายกับฉันก็ได้เจอกัน-cf62018531af https://medium.com/@mosprogramer/laravel-แล้วนายกับฉันก็ได้เจอกัน-cf62018531af]]&lt;br /&gt;
** Part 1: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-1-26bb954ac085 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-1-26bb954ac085]]&lt;br /&gt;
** Part 2: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-2-c1d038889ec3 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-2-c1d038889ec3]]&lt;br /&gt;
** Part 3: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-3-d0f58a4ca880 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-3-d0f58a4ca880]]&lt;br /&gt;
** Part 4: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-4-531f2c9dabe9 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-4-531f2c9dabe9]]&lt;br /&gt;
** Part 5: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-5-cb9f8f231dd5 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-5-cb9f8f231dd5]]&lt;br /&gt;
** Part 6: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-6-57283e8cb600 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-6-57283e8cb600]]&lt;br /&gt;
** Part 7: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-7-428156b6858a https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-7-428156b6858a]]&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Courseville_Project_Resources&amp;diff=151</id>
		<title>Courseville Project Resources</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Courseville_Project_Resources&amp;diff=151"/>
		<updated>2019-05-22T03:43:59Z</updated>

		<summary type="html">&lt;p&gt;Tata: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Docker ==&lt;br /&gt;
* [[https://bitpress.io/simple-approach-using-docker-with-php/?fbclid=IwAR0psAfTg9hjJGYJf9XFjmhkdWt9IytV_qEOKZhY5RKp6DdWJB896G-_uYs My Simple Approach to using Docker and PHP]]&lt;br /&gt;
&lt;br /&gt;
== Laravel ==&lt;br /&gt;
=== Deploying ===&lt;br /&gt;
* [[https://devmarketer.io/learn/setup-laravel-project-cloned-github-com/ How to Setup a Laravel Project You Cloned from Github.com]]&lt;br /&gt;
&lt;br /&gt;
=== OAUTH ===&lt;br /&gt;
* [[https://blog.pusher.com/make-an-oauth2-server-using-laravel-passport/ Make an OAuth2 server using Laravel Passport]]&lt;br /&gt;
* [[https://medium.com/modulr/create-api-authentication-with-passport-of-laravel-5-6-1dc2d400a7f Create API Rest with Laravel 5.6 Passport Authentication (Part 1)]]&lt;br /&gt;
* [[https://laravel.com/docs/5.8/passport Laravel Passport]] (OAUTH Library)&lt;br /&gt;
&lt;br /&gt;
=== Errors ===&lt;br /&gt;
* [[https://laravel-news.com/laravel-5-4-key-too-long-error Specified key was too long error]]&lt;br /&gt;
&lt;br /&gt;
=== Tutorials (Thai) ===&lt;br /&gt;
* Part 0: [[https://medium.com/@mosprogramer/laravel-แล้วนายกับฉันก็ได้เจอกัน-cf62018531af https://medium.com/@mosprogramer/laravel-แล้วนายกับฉันก็ได้เจอกัน-cf62018531af]]&lt;br /&gt;
* Part 1: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-1-26bb954ac085 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-1-26bb954ac085]]&lt;br /&gt;
* Part 2: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-2-c1d038889ec3 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-2-c1d038889ec3]]&lt;br /&gt;
* Part 3: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-3-d0f58a4ca880 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-3-d0f58a4ca880]]&lt;br /&gt;
* Part 4: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-4-531f2c9dabe9 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-4-531f2c9dabe9]]&lt;br /&gt;
* Part 5: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-5-cb9f8f231dd5 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-5-cb9f8f231dd5]]&lt;br /&gt;
* Part 6: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-6-57283e8cb600 https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-6-57283e8cb600]]&lt;br /&gt;
* Part 7: [[https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-7-428156b6858a https://medium.com/@mosprogramer/เรียน-laravel-กับ-mos-programmer-ตอนที่-7-428156b6858a]]&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=150</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=150"/>
		<updated>2019-04-25T17:13:31Z</updated>

		<summary type="html">&lt;p&gt;Tata: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;{{ config('app.name', 'Laravel') }}&amp;lt;/code&amp;gt;&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; ข้างบนสุดเพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;use Illuminate\Support\Facades\Schema;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; function boot เพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;Schema::defaultStringLength(191);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ลอง migrate default script&lt;br /&gt;
*: &amp;lt;pre&amp;gt;php artisan migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
* Sample&lt;br /&gt;
*: &amp;lt;!--syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    public function up()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::enableForeignKeyConstraints();&lt;br /&gt;
        Schema::create('cvdrive_comments', function (Blueprint $table) {&lt;br /&gt;
            $table-&amp;gt;increments('id');&lt;br /&gt;
            $table-&amp;gt;text('comment')-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_item_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('user_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_comment_id')-&amp;gt;unsigned()-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;timestamps();&lt;br /&gt;
&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_item_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_items')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('user_id')-&amp;gt;references('id')-&amp;gt;on('users')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_comment_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_comments')-&amp;gt;onDelete('cascade');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public function down()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::dropIfExists('cvdrive_comments');&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
* php artisan tinker&lt;br /&gt;
* new item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = new course();&lt;br /&gt;
$course-&amp;gt;number = &amp;quot;2110221&amp;quot;;&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;Computer Engineering Essentials&amp;quot;;&lt;br /&gt;
$course-&amp;gt;year = 2018;&lt;br /&gt;
$course-&amp;gt;semester = 2;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* duplicate item : $newcourse2 = $newcourse-&amp;gt;replicate();&lt;br /&gt;
* fetch item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$allcourses = course::all();&lt;br /&gt;
$findcourse = course::find(1);&lt;br /&gt;
$findcourse = course::where(number,&amp;quot;2110221&amp;quot;)-&amp;gt;get();&lt;br /&gt;
&lt;br /&gt;
// -&amp;gt;where(&amp;quot;title&amp;quot;,&amp;quot;like&amp;quot;,&amp;quot;%&amp;quot;.$keyword.&amp;quot;%&amp;quot;)&lt;br /&gt;
// -&amp;gt;orderBy('created_at','desc')&lt;br /&gt;
// -&amp;gt;paginate(10);&lt;br /&gt;
// In view show page numbers: {{$items-&amp;gt;links()}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* edit item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;NEW NAME&amp;quot;;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* delete item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;delete();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
* php artisan route:list&lt;br /&gt;
* Handle request&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$name = $request-&amp;gt;input('name', 'Default'); &lt;br /&gt;
$name = $request-&amp;gt;name;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Validation --&amp;gt; [https://laravel.com/docs/5.8/validation See Doc]&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$request-&amp;gt;validate([&lt;br /&gt;
    'title' =&amp;gt; 'required|max:255',&lt;br /&gt;
    'body' =&amp;gt; 'required',&lt;br /&gt;
]);&lt;br /&gt;
&lt;br /&gt;
// Frontend display error&lt;br /&gt;
@if ($errors-&amp;gt;any())&lt;br /&gt;
    &amp;lt;div class=&amp;quot;alert alert-danger&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            @foreach ($errors-&amp;gt;all() as $error)&lt;br /&gt;
                &amp;lt;li&amp;gt;{{ $error }}&amp;lt;/li&amp;gt;&lt;br /&gt;
            @endforeach&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* php artisan make:auth&lt;br /&gt;
&lt;br /&gt;
==== User System ====&lt;br /&gt;
* $user = Auth::user();&lt;br /&gt;
* $id = Auth::id();&lt;br /&gt;
* Protect route&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Protect in route&lt;br /&gt;
Route::get('index','homecontroller@index')-&amp;gt;middleware('auth');&lt;br /&gt;
&lt;br /&gt;
// Protect in constructor&lt;br /&gt;
public __construct{&lt;br /&gt;
    $this-&amp;gt;middleware('auth', ['except' =&amp;gt; ['getActivate', 'anotherMethod']]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Check if the user is loggedin&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if (Auth::check()) {&lt;br /&gt;
    // The user is logged in...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;br /&gt;
* Using Policy&lt;br /&gt;
* php artisan make:policy POLICY_NAME&lt;br /&gt;
* php artisan make:policy POLICY_NAME --model=MODEL // Create with basic CRUD&lt;br /&gt;
* Register Policy in &amp;lt;code&amp;gt;App/Providers/Authserviceprovider.php&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
    protected $policies = [&lt;br /&gt;
        Post::class =&amp;gt; PostPolicy::class,&lt;br /&gt;
    ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function update(User $user, Post $post){&lt;br /&gt;
    return $user-&amp;gt;id === $post-&amp;gt;user_id;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('update', $post)) {&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy without model&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function create(User $user){&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('create', Post::class)) { // ต้องบอก class เพื่อจะได้รู้ว่าจะไปเรียกจาก policy ของ class ไหน&lt;br /&gt;
    // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy in View&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
@can('update', $post)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@elsecan('create', App\Post::class)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Create New Post --&amp;gt;&lt;br /&gt;
@endcan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@if (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@unless (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can't Update The Post --&amp;gt;&lt;br /&gt;
@endunless&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
* Make test &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
// Create a test in the tests/Feature directory...&lt;br /&gt;
php artisan make:test UserTest&lt;br /&gt;
&lt;br /&gt;
// Create a test in the tests/Unit directory...&lt;br /&gt;
php artisan make:test UserTest --unit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Run test : In your project root run &amp;lt;pre&amp;gt;vendor/bin/phpunit&amp;lt;/pre&amp;gt;&lt;br /&gt;
* The CSRF middleware is automatically disabled when running tests&lt;br /&gt;
* Use model factory to generate fake object&lt;br /&gt;
** Factory is at &amp;lt;code&amp;gt; database/factories/UserFactory.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** In testing &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$user = factory(User::class)-&amp;gt;create();&lt;br /&gt;
$response = $this-&amp;gt;actingAs($user)-&amp;gt;withSession(['foo' =&amp;gt; 'bar'])-&amp;gt;get('/');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Browser Test [[https://laravel.com/docs/5.8/dusk https://laravel.com/docs/5.8/dusk]]&lt;br /&gt;
* And more ... in Laravel Doc&lt;br /&gt;
&lt;br /&gt;
== More and More ==&lt;br /&gt;
=== Middleware ===&lt;br /&gt;
* อยู่ระหว่าง routing กับ controller &lt;br /&gt;
** มีอยู่แล้วคือ Auth&lt;br /&gt;
** อาจมีอื่นๆ เช่น CORS middleware, Log middleware&lt;br /&gt;
* การสร้าง Middleware&lt;br /&gt;
** &amp;lt;code&amp;gt;php artisan make:middleware CheckAge&amp;lt;/code&amp;gt;&lt;br /&gt;
** File จะอยู่ที่ &amp;lt;code&amp;gt; app/Http/Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
** ตัวอย่างนี้ เป็น middleware ที่เช็ค age &lt;br /&gt;
*** ถ้า age &amp;lt;= 200 จะไม่อนุญาตให้ไปต่อ โดยจะ redirect ไปที่ home&lt;br /&gt;
*** ถ้า age &amp;gt; 200 จะไปต่อ โดยเรียก $next($request) $next คือ function ที่มันควรจะเข้าจริงๆ&lt;br /&gt;
** &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Middleware;&lt;br /&gt;
&lt;br /&gt;
use Closure;&lt;br /&gt;
&lt;br /&gt;
class CheckAge&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * Handle an incoming request.&lt;br /&gt;
     *&lt;br /&gt;
     * @param  \Illuminate\Http\Request  $request&lt;br /&gt;
     * @param  \Closure  $next&lt;br /&gt;
     * @return mixed&lt;br /&gt;
     */&lt;br /&gt;
    public function handle($request, Closure $next)&lt;br /&gt;
    {&lt;br /&gt;
        if ($request-&amp;gt;age &amp;lt;= 200) {&lt;br /&gt;
            return redirect('home');&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $next($request);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** Middleware อาจจะทำก่อน หริือ หลัง request ก็ได้ &lt;br /&gt;
*** ทำก่อน (ตัวอย่างกรณีข้างบน)&lt;br /&gt;
*** ทำหลัง &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
    public function handle($request, Closure $next)&lt;br /&gt;
    {&lt;br /&gt;
        $response = $next($request);&lt;br /&gt;
&lt;br /&gt;
        // Perform action&lt;br /&gt;
&lt;br /&gt;
        return $response;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* หลังจากสร้างแล้ว จะต้องเอาไป register ไว้ที่ &amp;lt;code&amp;gt; app/Http/Kernel.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* การนำไปใช้&lt;br /&gt;
** จะเอาไปผูกกับ route &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
Route::get('admin/profile', function () {&lt;br /&gt;
    //&lt;br /&gt;
})-&amp;gt;middleware('auth', 'second_middleware');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Middleware group (Assign ทีเดียวหลายตัวเป็น group)&lt;br /&gt;
* Middleware parameters&lt;br /&gt;
** ตัวอย่างการเช็ค role &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Middleware;&lt;br /&gt;
&lt;br /&gt;
use Closure;&lt;br /&gt;
&lt;br /&gt;
class CheckRole&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * Handle the incoming request.&lt;br /&gt;
     *&lt;br /&gt;
     * @param  \Illuminate\Http\Request  $request&lt;br /&gt;
     * @param  \Closure  $next&lt;br /&gt;
     * @param  string  $role&lt;br /&gt;
     * @return mixed&lt;br /&gt;
     */&lt;br /&gt;
    public function handle($request, Closure $next, $role)&lt;br /&gt;
    {&lt;br /&gt;
        if (! $request-&amp;gt;user()-&amp;gt;hasRole($role)) {&lt;br /&gt;
            // Redirect...&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $next($request);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** การนำไปใช้ กรณีนี้จะตรวจสอบว่า route นี้จะเข้าได้เฉพาะคนที่มี role เป็น editor เท่านั้น &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
Route::put('post/{id}', function ($id) {&lt;br /&gt;
    //&lt;br /&gt;
})-&amp;gt;middleware('role:editor');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OAUTH ===&lt;br /&gt;
* [[https://laravel.com/docs/5.8/passport Laravel Passport (Library for OAUTH Server)]]&lt;br /&gt;
&lt;br /&gt;
== More References ==&lt;br /&gt;
* [[https://github.com/alexeymezenin/laravel-best-practices#follow-laravel-naming-conventions Laravel Best Practices]]&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=149</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=149"/>
		<updated>2019-04-25T16:59:26Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Middleware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;{{ config('app.name', 'Laravel') }}&amp;lt;/code&amp;gt;&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; ข้างบนสุดเพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;use Illuminate\Support\Facades\Schema;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; function boot เพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;Schema::defaultStringLength(191);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ลอง migrate default script&lt;br /&gt;
*: &amp;lt;pre&amp;gt;php artisan migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
* Sample&lt;br /&gt;
*: &amp;lt;!--syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    public function up()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::enableForeignKeyConstraints();&lt;br /&gt;
        Schema::create('cvdrive_comments', function (Blueprint $table) {&lt;br /&gt;
            $table-&amp;gt;increments('id');&lt;br /&gt;
            $table-&amp;gt;text('comment')-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_item_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('user_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_comment_id')-&amp;gt;unsigned()-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;timestamps();&lt;br /&gt;
&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_item_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_items')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('user_id')-&amp;gt;references('id')-&amp;gt;on('users')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_comment_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_comments')-&amp;gt;onDelete('cascade');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public function down()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::dropIfExists('cvdrive_comments');&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
* php artisan tinker&lt;br /&gt;
* new item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = new course();&lt;br /&gt;
$course-&amp;gt;number = &amp;quot;2110221&amp;quot;;&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;Computer Engineering Essentials&amp;quot;;&lt;br /&gt;
$course-&amp;gt;year = 2018;&lt;br /&gt;
$course-&amp;gt;semester = 2;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* duplicate item : $newcourse2 = $newcourse-&amp;gt;replicate();&lt;br /&gt;
* fetch item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$allcourses = course::all();&lt;br /&gt;
$findcourse = course::find(1);&lt;br /&gt;
$findcourse = course::where(number,&amp;quot;2110221&amp;quot;)-&amp;gt;get();&lt;br /&gt;
&lt;br /&gt;
// -&amp;gt;where(&amp;quot;title&amp;quot;,&amp;quot;like&amp;quot;,&amp;quot;%&amp;quot;.$keyword.&amp;quot;%&amp;quot;)&lt;br /&gt;
// -&amp;gt;orderBy('created_at','desc')&lt;br /&gt;
// -&amp;gt;paginate(10);&lt;br /&gt;
// In view show page numbers: {{$items-&amp;gt;links()}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* edit item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;NEW NAME&amp;quot;;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* delete item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;delete();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
* php artisan route:list&lt;br /&gt;
* Handle request&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$name = $request-&amp;gt;input('name', 'Default'); &lt;br /&gt;
$name = $request-&amp;gt;name;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Validation --&amp;gt; [https://laravel.com/docs/5.8/validation See Doc]&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$request-&amp;gt;validate([&lt;br /&gt;
    'title' =&amp;gt; 'required|max:255',&lt;br /&gt;
    'body' =&amp;gt; 'required',&lt;br /&gt;
]);&lt;br /&gt;
&lt;br /&gt;
// Frontend display error&lt;br /&gt;
@if ($errors-&amp;gt;any())&lt;br /&gt;
    &amp;lt;div class=&amp;quot;alert alert-danger&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            @foreach ($errors-&amp;gt;all() as $error)&lt;br /&gt;
                &amp;lt;li&amp;gt;{{ $error }}&amp;lt;/li&amp;gt;&lt;br /&gt;
            @endforeach&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* php artisan make:auth&lt;br /&gt;
&lt;br /&gt;
==== User System ====&lt;br /&gt;
* $user = Auth::user();&lt;br /&gt;
* $id = Auth::id();&lt;br /&gt;
* Protect route&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Protect in route&lt;br /&gt;
Route::get('index','homecontroller@index')-&amp;gt;middleware('auth');&lt;br /&gt;
&lt;br /&gt;
// Protect in constructor&lt;br /&gt;
public __construct{&lt;br /&gt;
    $this-&amp;gt;middleware('auth', ['except' =&amp;gt; ['getActivate', 'anotherMethod']]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Check if the user is loggedin&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if (Auth::check()) {&lt;br /&gt;
    // The user is logged in...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;br /&gt;
* Using Policy&lt;br /&gt;
* php artisan make:policy POLICY_NAME&lt;br /&gt;
* php artisan make:policy POLICY_NAME --model=MODEL // Create with basic CRUD&lt;br /&gt;
* Register Policy in &amp;lt;code&amp;gt;App/Providers/Authserviceprovider.php&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
    protected $policies = [&lt;br /&gt;
        Post::class =&amp;gt; PostPolicy::class,&lt;br /&gt;
    ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function update(User $user, Post $post){&lt;br /&gt;
    return $user-&amp;gt;id === $post-&amp;gt;user_id;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('update', $post)) {&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy without model&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function create(User $user){&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('create', Post::class)) { // ต้องบอก class เพื่อจะได้รู้ว่าจะไปเรียกจาก policy ของ class ไหน&lt;br /&gt;
    // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy in View&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
@can('update', $post)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@elsecan('create', App\Post::class)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Create New Post --&amp;gt;&lt;br /&gt;
@endcan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@if (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@unless (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can't Update The Post --&amp;gt;&lt;br /&gt;
@endunless&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
* Make test &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
// Create a test in the tests/Feature directory...&lt;br /&gt;
php artisan make:test UserTest&lt;br /&gt;
&lt;br /&gt;
// Create a test in the tests/Unit directory...&lt;br /&gt;
php artisan make:test UserTest --unit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Run test : In your project root run &amp;lt;pre&amp;gt;vendor/bin/phpunit&amp;lt;/pre&amp;gt;&lt;br /&gt;
* The CSRF middleware is automatically disabled when running tests&lt;br /&gt;
* Use model factory to generate fake object&lt;br /&gt;
** Factory is at &amp;lt;code&amp;gt; database/factories/UserFactory.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** In testing &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$user = factory(User::class)-&amp;gt;create();&lt;br /&gt;
$response = $this-&amp;gt;actingAs($user)-&amp;gt;withSession(['foo' =&amp;gt; 'bar'])-&amp;gt;get('/');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Browser Test [[https://laravel.com/docs/5.8/dusk https://laravel.com/docs/5.8/dusk]]&lt;br /&gt;
* And more ... in Laravel Doc&lt;br /&gt;
&lt;br /&gt;
== More and More ==&lt;br /&gt;
=== Middleware ===&lt;br /&gt;
* อยู่ระหว่าง routing กับ controller &lt;br /&gt;
** มีอยู่แล้วคือ Auth&lt;br /&gt;
** อาจมีอื่นๆ เช่น CORS middleware, Log middleware&lt;br /&gt;
* การสร้าง Middleware&lt;br /&gt;
** &amp;lt;code&amp;gt;php artisan make:middleware CheckAge&amp;lt;/code&amp;gt;&lt;br /&gt;
** File จะอยู่ที่ &amp;lt;code&amp;gt; app/Http/Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
** ตัวอย่างนี้ เป็น middleware ที่เช็ค age &lt;br /&gt;
*** ถ้า age &amp;lt;= 200 จะไม่อนุญาตให้ไปต่อ โดยจะ redirect ไปที่ home&lt;br /&gt;
*** ถ้า age &amp;gt; 200 จะไปต่อ โดยเรียก $next($request) $next คือ function ที่มันควรจะเข้าจริงๆ&lt;br /&gt;
** &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Middleware;&lt;br /&gt;
&lt;br /&gt;
use Closure;&lt;br /&gt;
&lt;br /&gt;
class CheckAge&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * Handle an incoming request.&lt;br /&gt;
     *&lt;br /&gt;
     * @param  \Illuminate\Http\Request  $request&lt;br /&gt;
     * @param  \Closure  $next&lt;br /&gt;
     * @return mixed&lt;br /&gt;
     */&lt;br /&gt;
    public function handle($request, Closure $next)&lt;br /&gt;
    {&lt;br /&gt;
        if ($request-&amp;gt;age &amp;lt;= 200) {&lt;br /&gt;
            return redirect('home');&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $next($request);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** Middleware อาจจะทำก่อน หริือ หลัง request ก็ได้ &lt;br /&gt;
*** ทำก่อน (ตัวอย่างกรณีข้างบน)&lt;br /&gt;
*** ทำหลัง &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
    public function handle($request, Closure $next)&lt;br /&gt;
    {&lt;br /&gt;
        $response = $next($request);&lt;br /&gt;
&lt;br /&gt;
        // Perform action&lt;br /&gt;
&lt;br /&gt;
        return $response;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* หลังจากสร้างแล้ว จะต้องเอาไป register ไว้ที่ &amp;lt;code&amp;gt; app/Http/Kernel.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* การนำไปใช้&lt;br /&gt;
** จะเอาไปผูกกับ route &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
Route::get('admin/profile', function () {&lt;br /&gt;
    //&lt;br /&gt;
})-&amp;gt;middleware('auth', 'second_middleware');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Middleware group (Assign ทีเดียวหลายตัวเป็น group)&lt;br /&gt;
* Middleware parameters&lt;br /&gt;
** ตัวอย่างการเช็ค role &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Middleware;&lt;br /&gt;
&lt;br /&gt;
use Closure;&lt;br /&gt;
&lt;br /&gt;
class CheckRole&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * Handle the incoming request.&lt;br /&gt;
     *&lt;br /&gt;
     * @param  \Illuminate\Http\Request  $request&lt;br /&gt;
     * @param  \Closure  $next&lt;br /&gt;
     * @param  string  $role&lt;br /&gt;
     * @return mixed&lt;br /&gt;
     */&lt;br /&gt;
    public function handle($request, Closure $next, $role)&lt;br /&gt;
    {&lt;br /&gt;
        if (! $request-&amp;gt;user()-&amp;gt;hasRole($role)) {&lt;br /&gt;
            // Redirect...&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $next($request);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** การนำไปใช้ กรณีนี้จะตรวจสอบว่า route นี้จะเข้าได้เฉพาะคนที่มี role เป็น editor เท่านั้น &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
Route::put('post/{id}', function ($id) {&lt;br /&gt;
    //&lt;br /&gt;
})-&amp;gt;middleware('role:editor');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OAUTH ===&lt;br /&gt;
* [[https://laravel.com/docs/5.8/passport Laravel Passport (Library for OAUTH Server)]]&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=148</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=148"/>
		<updated>2019-04-25T16:22:53Z</updated>

		<summary type="html">&lt;p&gt;Tata: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;{{ config('app.name', 'Laravel') }}&amp;lt;/code&amp;gt;&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; ข้างบนสุดเพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;use Illuminate\Support\Facades\Schema;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; function boot เพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;Schema::defaultStringLength(191);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ลอง migrate default script&lt;br /&gt;
*: &amp;lt;pre&amp;gt;php artisan migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
* Sample&lt;br /&gt;
*: &amp;lt;!--syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    public function up()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::enableForeignKeyConstraints();&lt;br /&gt;
        Schema::create('cvdrive_comments', function (Blueprint $table) {&lt;br /&gt;
            $table-&amp;gt;increments('id');&lt;br /&gt;
            $table-&amp;gt;text('comment')-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_item_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('user_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_comment_id')-&amp;gt;unsigned()-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;timestamps();&lt;br /&gt;
&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_item_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_items')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('user_id')-&amp;gt;references('id')-&amp;gt;on('users')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_comment_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_comments')-&amp;gt;onDelete('cascade');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public function down()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::dropIfExists('cvdrive_comments');&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
* php artisan tinker&lt;br /&gt;
* new item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = new course();&lt;br /&gt;
$course-&amp;gt;number = &amp;quot;2110221&amp;quot;;&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;Computer Engineering Essentials&amp;quot;;&lt;br /&gt;
$course-&amp;gt;year = 2018;&lt;br /&gt;
$course-&amp;gt;semester = 2;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* duplicate item : $newcourse2 = $newcourse-&amp;gt;replicate();&lt;br /&gt;
* fetch item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$allcourses = course::all();&lt;br /&gt;
$findcourse = course::find(1);&lt;br /&gt;
$findcourse = course::where(number,&amp;quot;2110221&amp;quot;)-&amp;gt;get();&lt;br /&gt;
&lt;br /&gt;
// -&amp;gt;where(&amp;quot;title&amp;quot;,&amp;quot;like&amp;quot;,&amp;quot;%&amp;quot;.$keyword.&amp;quot;%&amp;quot;)&lt;br /&gt;
// -&amp;gt;orderBy('created_at','desc')&lt;br /&gt;
// -&amp;gt;paginate(10);&lt;br /&gt;
// In view show page numbers: {{$items-&amp;gt;links()}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* edit item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;NEW NAME&amp;quot;;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* delete item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;delete();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
* php artisan route:list&lt;br /&gt;
* Handle request&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$name = $request-&amp;gt;input('name', 'Default'); &lt;br /&gt;
$name = $request-&amp;gt;name;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Validation --&amp;gt; [https://laravel.com/docs/5.8/validation See Doc]&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$request-&amp;gt;validate([&lt;br /&gt;
    'title' =&amp;gt; 'required|max:255',&lt;br /&gt;
    'body' =&amp;gt; 'required',&lt;br /&gt;
]);&lt;br /&gt;
&lt;br /&gt;
// Frontend display error&lt;br /&gt;
@if ($errors-&amp;gt;any())&lt;br /&gt;
    &amp;lt;div class=&amp;quot;alert alert-danger&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            @foreach ($errors-&amp;gt;all() as $error)&lt;br /&gt;
                &amp;lt;li&amp;gt;{{ $error }}&amp;lt;/li&amp;gt;&lt;br /&gt;
            @endforeach&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* php artisan make:auth&lt;br /&gt;
&lt;br /&gt;
==== User System ====&lt;br /&gt;
* $user = Auth::user();&lt;br /&gt;
* $id = Auth::id();&lt;br /&gt;
* Protect route&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Protect in route&lt;br /&gt;
Route::get('index','homecontroller@index')-&amp;gt;middleware('auth');&lt;br /&gt;
&lt;br /&gt;
// Protect in constructor&lt;br /&gt;
public __construct{&lt;br /&gt;
    $this-&amp;gt;middleware('auth', ['except' =&amp;gt; ['getActivate', 'anotherMethod']]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Check if the user is loggedin&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if (Auth::check()) {&lt;br /&gt;
    // The user is logged in...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;br /&gt;
* Using Policy&lt;br /&gt;
* php artisan make:policy POLICY_NAME&lt;br /&gt;
* php artisan make:policy POLICY_NAME --model=MODEL // Create with basic CRUD&lt;br /&gt;
* Register Policy in &amp;lt;code&amp;gt;App/Providers/Authserviceprovider.php&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
    protected $policies = [&lt;br /&gt;
        Post::class =&amp;gt; PostPolicy::class,&lt;br /&gt;
    ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function update(User $user, Post $post){&lt;br /&gt;
    return $user-&amp;gt;id === $post-&amp;gt;user_id;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('update', $post)) {&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy without model&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function create(User $user){&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('create', Post::class)) { // ต้องบอก class เพื่อจะได้รู้ว่าจะไปเรียกจาก policy ของ class ไหน&lt;br /&gt;
    // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy in View&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
@can('update', $post)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@elsecan('create', App\Post::class)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Create New Post --&amp;gt;&lt;br /&gt;
@endcan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@if (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@unless (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can't Update The Post --&amp;gt;&lt;br /&gt;
@endunless&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
* Make test &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
// Create a test in the tests/Feature directory...&lt;br /&gt;
php artisan make:test UserTest&lt;br /&gt;
&lt;br /&gt;
// Create a test in the tests/Unit directory...&lt;br /&gt;
php artisan make:test UserTest --unit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Run test : In your project root run &amp;lt;pre&amp;gt;vendor/bin/phpunit&amp;lt;/pre&amp;gt;&lt;br /&gt;
* The CSRF middleware is automatically disabled when running tests&lt;br /&gt;
* Use model factory to generate fake object&lt;br /&gt;
** Factory is at &amp;lt;code&amp;gt; database/factories/UserFactory.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** In testing &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$user = factory(User::class)-&amp;gt;create();&lt;br /&gt;
$response = $this-&amp;gt;actingAs($user)-&amp;gt;withSession(['foo' =&amp;gt; 'bar'])-&amp;gt;get('/');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Browser Test [[https://laravel.com/docs/5.8/dusk https://laravel.com/docs/5.8/dusk]]&lt;br /&gt;
* And more ... in Laravel Doc&lt;br /&gt;
&lt;br /&gt;
== More and More ==&lt;br /&gt;
=== Middleware ===&lt;br /&gt;
&lt;br /&gt;
=== OAUTH ===&lt;br /&gt;
* [[https://laravel.com/docs/5.8/passport Laravel Passport (Library for OAUTH Server)]]&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=147</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=147"/>
		<updated>2019-04-25T14:20:38Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;{{ config('app.name', 'Laravel') }}&amp;lt;/code&amp;gt;&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; ข้างบนสุดเพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;use Illuminate\Support\Facades\Schema;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; function boot เพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;Schema::defaultStringLength(191);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ลอง migrate default script&lt;br /&gt;
*: &amp;lt;pre&amp;gt;php artisan migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
* Sample&lt;br /&gt;
*: &amp;lt;!--syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    public function up()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::enableForeignKeyConstraints();&lt;br /&gt;
        Schema::create('cvdrive_comments', function (Blueprint $table) {&lt;br /&gt;
            $table-&amp;gt;increments('id');&lt;br /&gt;
            $table-&amp;gt;text('comment')-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_item_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('user_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_comment_id')-&amp;gt;unsigned()-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;timestamps();&lt;br /&gt;
&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_item_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_items')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('user_id')-&amp;gt;references('id')-&amp;gt;on('users')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_comment_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_comments')-&amp;gt;onDelete('cascade');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public function down()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::dropIfExists('cvdrive_comments');&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
* php artisan tinker&lt;br /&gt;
* new item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = new course();&lt;br /&gt;
$course-&amp;gt;number = &amp;quot;2110221&amp;quot;;&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;Computer Engineering Essentials&amp;quot;;&lt;br /&gt;
$course-&amp;gt;year = 2018;&lt;br /&gt;
$course-&amp;gt;semester = 2;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* duplicate item : $newcourse2 = $newcourse-&amp;gt;replicate();&lt;br /&gt;
* fetch item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$allcourses = course::all();&lt;br /&gt;
$findcourse = course::find(1);&lt;br /&gt;
$findcourse = course::where(number,&amp;quot;2110221&amp;quot;)-&amp;gt;get();&lt;br /&gt;
&lt;br /&gt;
// -&amp;gt;where(&amp;quot;title&amp;quot;,&amp;quot;like&amp;quot;,&amp;quot;%&amp;quot;.$keyword.&amp;quot;%&amp;quot;)&lt;br /&gt;
// -&amp;gt;orderBy('created_at','desc')&lt;br /&gt;
// -&amp;gt;paginate(10);&lt;br /&gt;
// In view show page numbers: {{$items-&amp;gt;links()}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* edit item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;NEW NAME&amp;quot;;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* delete item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;delete();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
* php artisan route:list&lt;br /&gt;
* Handle request&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$name = $request-&amp;gt;input('name', 'Default'); &lt;br /&gt;
$name = $request-&amp;gt;name;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Validation --&amp;gt; [https://laravel.com/docs/5.8/validation See Doc]&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$request-&amp;gt;validate([&lt;br /&gt;
    'title' =&amp;gt; 'required|max:255',&lt;br /&gt;
    'body' =&amp;gt; 'required',&lt;br /&gt;
]);&lt;br /&gt;
&lt;br /&gt;
// Frontend display error&lt;br /&gt;
@if ($errors-&amp;gt;any())&lt;br /&gt;
    &amp;lt;div class=&amp;quot;alert alert-danger&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            @foreach ($errors-&amp;gt;all() as $error)&lt;br /&gt;
                &amp;lt;li&amp;gt;{{ $error }}&amp;lt;/li&amp;gt;&lt;br /&gt;
            @endforeach&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* php artisan make:auth&lt;br /&gt;
&lt;br /&gt;
==== User System ====&lt;br /&gt;
* $user = Auth::user();&lt;br /&gt;
* $id = Auth::id();&lt;br /&gt;
* Protect route&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Protect in route&lt;br /&gt;
Route::get('index','homecontroller@index')-&amp;gt;middleware('auth');&lt;br /&gt;
&lt;br /&gt;
// Protect in constructor&lt;br /&gt;
public __construct{&lt;br /&gt;
    $this-&amp;gt;middleware('auth', ['except' =&amp;gt; ['getActivate', 'anotherMethod']]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Check if the user is loggedin&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if (Auth::check()) {&lt;br /&gt;
    // The user is logged in...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;br /&gt;
* Using Policy&lt;br /&gt;
* php artisan make:policy POLICY_NAME&lt;br /&gt;
* php artisan make:policy POLICY_NAME --model=MODEL // Create with basic CRUD&lt;br /&gt;
* Register Policy in &amp;lt;code&amp;gt;App/Providers/Authserviceprovider.php&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
    protected $policies = [&lt;br /&gt;
        Post::class =&amp;gt; PostPolicy::class,&lt;br /&gt;
    ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function update(User $user, Post $post){&lt;br /&gt;
    return $user-&amp;gt;id === $post-&amp;gt;user_id;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('update', $post)) {&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy without model&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function create(User $user){&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('create', Post::class)) { // ต้องบอก class เพื่อจะได้รู้ว่าจะไปเรียกจาก policy ของ class ไหน&lt;br /&gt;
    // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy in View&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
@can('update', $post)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@elsecan('create', App\Post::class)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Create New Post --&amp;gt;&lt;br /&gt;
@endcan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@if (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@unless (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can't Update The Post --&amp;gt;&lt;br /&gt;
@endunless&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
* Make test &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
// Create a test in the tests/Feature directory...&lt;br /&gt;
php artisan make:test UserTest&lt;br /&gt;
&lt;br /&gt;
// Create a test in the tests/Unit directory...&lt;br /&gt;
php artisan make:test UserTest --unit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Run test : In your project root run &amp;lt;pre&amp;gt;vendor/bin/phpunit&amp;lt;/pre&amp;gt;&lt;br /&gt;
* The CSRF middleware is automatically disabled when running tests&lt;br /&gt;
* Use model factory to generate fake object&lt;br /&gt;
** Factory is at &amp;lt;code&amp;gt; database/factories/UserFactory.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** In testing &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$user = factory(User::class)-&amp;gt;create();&lt;br /&gt;
$response = $this-&amp;gt;actingAs($user)-&amp;gt;withSession(['foo' =&amp;gt; 'bar'])-&amp;gt;get('/');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Browser Test [[https://laravel.com/docs/5.8/dusk https://laravel.com/docs/5.8/dusk]]&lt;br /&gt;
* And more ... in Laravel Doc&lt;br /&gt;
&lt;br /&gt;
== Advanced ==&lt;br /&gt;
=== Middleware ===&lt;br /&gt;
&lt;br /&gt;
=== OAUTH ===&lt;br /&gt;
* [[https://laravel.com/docs/5.8/passport Laravel Passport (Library for OAUTH Server)]]&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=146</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=146"/>
		<updated>2019-04-25T13:57:58Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;{{ config('app.name', 'Laravel') }}&amp;lt;/code&amp;gt;&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; ข้างบนสุดเพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;use Illuminate\Support\Facades\Schema;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; function boot เพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;Schema::defaultStringLength(191);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ลอง migrate default script&lt;br /&gt;
*: &amp;lt;pre&amp;gt;php artisan migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
* Sample&lt;br /&gt;
*: &amp;lt;!--syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    public function up()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::enableForeignKeyConstraints();&lt;br /&gt;
        Schema::create('cvdrive_comments', function (Blueprint $table) {&lt;br /&gt;
            $table-&amp;gt;increments('id');&lt;br /&gt;
            $table-&amp;gt;text('comment')-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_item_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('user_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_comment_id')-&amp;gt;unsigned()-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;timestamps();&lt;br /&gt;
&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_item_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_items')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('user_id')-&amp;gt;references('id')-&amp;gt;on('users')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_comment_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_comments')-&amp;gt;onDelete('cascade');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public function down()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::dropIfExists('cvdrive_comments');&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
* php artisan tinker&lt;br /&gt;
* new item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = new course();&lt;br /&gt;
$course-&amp;gt;number = &amp;quot;2110221&amp;quot;;&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;Computer Engineering Essentials&amp;quot;;&lt;br /&gt;
$course-&amp;gt;year = 2018;&lt;br /&gt;
$course-&amp;gt;semester = 2;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* duplicate item : $newcourse2 = $newcourse-&amp;gt;replicate();&lt;br /&gt;
* fetch item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$allcourses = course::all();&lt;br /&gt;
$findcourse = course::find(1);&lt;br /&gt;
$findcourse = course::where(number,&amp;quot;2110221&amp;quot;)-&amp;gt;get();&lt;br /&gt;
&lt;br /&gt;
// -&amp;gt;where(&amp;quot;title&amp;quot;,&amp;quot;like&amp;quot;,&amp;quot;%&amp;quot;.$keyword.&amp;quot;%&amp;quot;)&lt;br /&gt;
// -&amp;gt;orderBy('created_at','desc')&lt;br /&gt;
// -&amp;gt;paginate(10);&lt;br /&gt;
// In view show page numbers: {{$items-&amp;gt;links()}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* edit item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;NEW NAME&amp;quot;;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* delete item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;delete();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
* php artisan route:list&lt;br /&gt;
* Handle request&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$name = $request-&amp;gt;input('name', 'Default'); &lt;br /&gt;
$name = $request-&amp;gt;name;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Validation --&amp;gt; [https://laravel.com/docs/5.8/validation See Doc]&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$request-&amp;gt;validate([&lt;br /&gt;
    'title' =&amp;gt; 'required|max:255',&lt;br /&gt;
    'body' =&amp;gt; 'required',&lt;br /&gt;
]);&lt;br /&gt;
&lt;br /&gt;
// Frontend display error&lt;br /&gt;
@if ($errors-&amp;gt;any())&lt;br /&gt;
    &amp;lt;div class=&amp;quot;alert alert-danger&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            @foreach ($errors-&amp;gt;all() as $error)&lt;br /&gt;
                &amp;lt;li&amp;gt;{{ $error }}&amp;lt;/li&amp;gt;&lt;br /&gt;
            @endforeach&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* php artisan make:auth&lt;br /&gt;
&lt;br /&gt;
==== User System ====&lt;br /&gt;
* $user = Auth::user();&lt;br /&gt;
* $id = Auth::id();&lt;br /&gt;
* Protect route&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Protect in route&lt;br /&gt;
Route::get('index','homecontroller@index')-&amp;gt;middleware('auth');&lt;br /&gt;
&lt;br /&gt;
// Protect in constructor&lt;br /&gt;
public __construct{&lt;br /&gt;
    $this-&amp;gt;middleware('auth', ['except' =&amp;gt; ['getActivate', 'anotherMethod']]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Check if the user is loggedin&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if (Auth::check()) {&lt;br /&gt;
    // The user is logged in...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;br /&gt;
* Using Policy&lt;br /&gt;
* php artisan make:policy POLICY_NAME&lt;br /&gt;
* php artisan make:policy POLICY_NAME --model=MODEL // Create with basic CRUD&lt;br /&gt;
* Register Policy in &amp;lt;code&amp;gt;App/Providers/Authserviceprovider.php&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
    protected $policies = [&lt;br /&gt;
        Post::class =&amp;gt; PostPolicy::class,&lt;br /&gt;
    ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function update(User $user, Post $post){&lt;br /&gt;
    return $user-&amp;gt;id === $post-&amp;gt;user_id;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('update', $post)) {&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy without model&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function create(User $user){&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('create', Post::class)) { // ต้องบอก class เพื่อจะได้รู้ว่าจะไปเรียกจาก policy ของ class ไหน&lt;br /&gt;
    // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy in View&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
@can('update', $post)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@elsecan('create', App\Post::class)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Create New Post --&amp;gt;&lt;br /&gt;
@endcan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@if (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@unless (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can't Update The Post --&amp;gt;&lt;br /&gt;
@endunless&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
* Make test &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
// Create a test in the tests/Feature directory...&lt;br /&gt;
php artisan make:test UserTest&lt;br /&gt;
&lt;br /&gt;
// Create a test in the tests/Unit directory...&lt;br /&gt;
php artisan make:test UserTest --unit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Run test : In your project root run &amp;lt;pre&amp;gt;vendor/bin/phpunit&amp;lt;/pre&amp;gt;&lt;br /&gt;
* The CSRF middleware is automatically disabled when running tests&lt;br /&gt;
* Use model factory to generate fake object&lt;br /&gt;
** Factory is at&lt;br /&gt;
&lt;br /&gt;
== Advanced ==&lt;br /&gt;
=== Middleware ===&lt;br /&gt;
&lt;br /&gt;
=== OAUTH ===&lt;br /&gt;
* [[https://laravel.com/docs/5.8/passport Laravel Passport (Library for OAUTH Server)]]&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Linux_Server_Configuration&amp;diff=145</id>
		<title>Basic Linux Server Configuration</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Linux_Server_Configuration&amp;diff=145"/>
		<updated>2019-04-23T19:12:39Z</updated>

		<summary type="html">&lt;p&gt;Tata: Created page with &amp;quot;= Flow = # สร้าง Droplet #* สร้าง Droplet เปล่าๆ #* สร้าง Droplet with LAMP Stack # สร้าง User # Add user to sudoer # Insta...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Flow =&lt;br /&gt;
# สร้าง Droplet&lt;br /&gt;
#* สร้าง Droplet เปล่าๆ&lt;br /&gt;
#* สร้าง Droplet with LAMP Stack&lt;br /&gt;
# สร้าง User&lt;br /&gt;
# Add user to sudoer&lt;br /&gt;
# Install LAMP Stack (ถ้าสร้าง Droplet เปล่าๆ)&lt;br /&gt;
# Install phpMyAdmin&lt;br /&gt;
# ลองสร้าง webpage&lt;br /&gt;
# ลองสร้าง site ย่อย&lt;br /&gt;
# softlink จาก home ไป /var/www&lt;br /&gt;
# Virtual Host&lt;br /&gt;
# https&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Main_Page&amp;diff=144</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Main_Page&amp;diff=144"/>
		<updated>2019-04-19T14:08:03Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Training */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teaching ==&lt;br /&gt;
=== ACIOI ===&lt;br /&gt;
&lt;br /&gt;
== Knowledge Base ==&lt;br /&gt;
=== Data Structure ===&lt;br /&gt;
* [[Linked List in C]]&lt;br /&gt;
&lt;br /&gt;
=== Algorithm ===&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
* [[Basic Linux Command]]&lt;br /&gt;
&lt;br /&gt;
=== Useful Links ===&lt;br /&gt;
* [[Courseville Project Resources]]&lt;br /&gt;
&lt;br /&gt;
=== wiki.acioi.in.th (archived) ===&lt;br /&gt;
* [[Old acioi wiki]]&lt;br /&gt;
&lt;br /&gt;
== Training ==&lt;br /&gt;
=== CourseVille ===&lt;br /&gt;
* [[Basic Laravel Training (for CV)]]&lt;br /&gt;
&lt;br /&gt;
=== AC ===&lt;br /&gt;
* [[Basic Linux Server Configuration]]&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Courseville_Project_Resources&amp;diff=143</id>
		<title>Courseville Project Resources</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Courseville_Project_Resources&amp;diff=143"/>
		<updated>2019-04-17T10:19:55Z</updated>

		<summary type="html">&lt;p&gt;Tata: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Docker ==&lt;br /&gt;
* [[https://bitpress.io/simple-approach-using-docker-with-php/?fbclid=IwAR0psAfTg9hjJGYJf9XFjmhkdWt9IytV_qEOKZhY5RKp6DdWJB896G-_uYs My Simple Approach to using Docker and PHP]]&lt;br /&gt;
&lt;br /&gt;
== Laravel ==&lt;br /&gt;
=== Deploying ===&lt;br /&gt;
* [[https://devmarketer.io/learn/setup-laravel-project-cloned-github-com/ How to Setup a Laravel Project You Cloned from Github.com]]&lt;br /&gt;
&lt;br /&gt;
=== OAUTH ===&lt;br /&gt;
* [[https://blog.pusher.com/make-an-oauth2-server-using-laravel-passport/ Make an OAuth2 server using Laravel Passport]]&lt;br /&gt;
* [[https://medium.com/modulr/create-api-authentication-with-passport-of-laravel-5-6-1dc2d400a7f Create API Rest with Laravel 5.6 Passport Authentication (Part 1)]]&lt;br /&gt;
* [[https://laravel.com/docs/5.8/passport Laravel Passport]] (OAUTH Library)&lt;br /&gt;
&lt;br /&gt;
=== Errors ===&lt;br /&gt;
* [[https://laravel-news.com/laravel-5-4-key-too-long-error Specified key was too long error]]&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Courseville_Project_Resources&amp;diff=142</id>
		<title>Courseville Project Resources</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Courseville_Project_Resources&amp;diff=142"/>
		<updated>2019-04-17T10:19:26Z</updated>

		<summary type="html">&lt;p&gt;Tata: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Docker ==&lt;br /&gt;
* [[https://bitpress.io/simple-approach-using-docker-with-php/?fbclid=IwAR0psAfTg9hjJGYJf9XFjmhkdWt9IytV_qEOKZhY5RKp6DdWJB896G-_uYs My Simple Approach to using Docker and PHP]]&lt;br /&gt;
&lt;br /&gt;
== Laravel ==&lt;br /&gt;
* [[https://devmarketer.io/learn/setup-laravel-project-cloned-github-com/ How to Setup a Laravel Project You Cloned from Github.com]]&lt;br /&gt;
* [[https://blog.pusher.com/make-an-oauth2-server-using-laravel-passport/ Make an OAuth2 server using Laravel Passport]]&lt;br /&gt;
* [[https://medium.com/modulr/create-api-authentication-with-passport-of-laravel-5-6-1dc2d400a7f Create API Rest with Laravel 5.6 Passport Authentication (Part 1)]]&lt;br /&gt;
* [[https://laravel.com/docs/5.8/passport Laravel Passport]] (OAUTH Library)&lt;br /&gt;
&lt;br /&gt;
=== Errors ===&lt;br /&gt;
* [[https://laravel-news.com/laravel-5-4-key-too-long-error Specified key was too long error]]&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Courseville_Project_Resources&amp;diff=141</id>
		<title>Courseville Project Resources</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Courseville_Project_Resources&amp;diff=141"/>
		<updated>2019-04-16T16:20:50Z</updated>

		<summary type="html">&lt;p&gt;Tata: Created page with &amp;quot;== Docker == * https://bitpress.io/simple-approach-using-docker-with-php/?fbclid=IwAR0psAfTg9hjJGYJf9XFjmhkdWt9IytV_qEOKZhY5RKp6DdWJB896G-_uYs My Simple Approach to using Do...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Docker ==&lt;br /&gt;
* [[https://bitpress.io/simple-approach-using-docker-with-php/?fbclid=IwAR0psAfTg9hjJGYJf9XFjmhkdWt9IytV_qEOKZhY5RKp6DdWJB896G-_uYs My Simple Approach to using Docker and PHP]]&lt;br /&gt;
&lt;br /&gt;
== Laravel ==&lt;br /&gt;
* [[https://devmarketer.io/learn/setup-laravel-project-cloned-github-com/ How to Setup a Laravel Project You Cloned from Github.com]]&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Main_Page&amp;diff=140</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Main_Page&amp;diff=140"/>
		<updated>2019-04-16T16:19:36Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Knowledge Base */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teaching ==&lt;br /&gt;
=== ACIOI ===&lt;br /&gt;
&lt;br /&gt;
== Knowledge Base ==&lt;br /&gt;
=== Data Structure ===&lt;br /&gt;
* [[Linked List in C]]&lt;br /&gt;
&lt;br /&gt;
=== Algorithm ===&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
* [[Basic Linux Command]]&lt;br /&gt;
&lt;br /&gt;
=== Useful Links ===&lt;br /&gt;
* [[Courseville Project Resources]]&lt;br /&gt;
&lt;br /&gt;
=== wiki.acioi.in.th (archived) ===&lt;br /&gt;
* [[Old acioi wiki]]&lt;br /&gt;
&lt;br /&gt;
== Training ==&lt;br /&gt;
=== CourseVille ===&lt;br /&gt;
* [[Basic Laravel Training (for CV)]]&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=139</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=139"/>
		<updated>2019-04-16T08:33:41Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Advanced */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;{{ config('app.name', 'Laravel') }}&amp;lt;/code&amp;gt;&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; ข้างบนสุดเพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;use Illuminate\Support\Facades\Schema;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; function boot เพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;Schema::defaultStringLength(191);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ลอง migrate default script&lt;br /&gt;
*: &amp;lt;pre&amp;gt;php artisan migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
* Sample&lt;br /&gt;
*: &amp;lt;!--syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    public function up()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::enableForeignKeyConstraints();&lt;br /&gt;
        Schema::create('cvdrive_comments', function (Blueprint $table) {&lt;br /&gt;
            $table-&amp;gt;increments('id');&lt;br /&gt;
            $table-&amp;gt;text('comment')-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_item_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('user_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_comment_id')-&amp;gt;unsigned()-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;timestamps();&lt;br /&gt;
&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_item_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_items')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('user_id')-&amp;gt;references('id')-&amp;gt;on('users')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_comment_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_comments')-&amp;gt;onDelete('cascade');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public function down()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::dropIfExists('cvdrive_comments');&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
* php artisan tinker&lt;br /&gt;
* new item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = new course();&lt;br /&gt;
$course-&amp;gt;number = &amp;quot;2110221&amp;quot;;&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;Computer Engineering Essentials&amp;quot;;&lt;br /&gt;
$course-&amp;gt;year = 2018;&lt;br /&gt;
$course-&amp;gt;semester = 2;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* duplicate item : $newcourse2 = $newcourse-&amp;gt;replicate();&lt;br /&gt;
* fetch item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$allcourses = course::all();&lt;br /&gt;
$findcourse = course::find(1);&lt;br /&gt;
$findcourse = course::where(number,&amp;quot;2110221&amp;quot;)-&amp;gt;get();&lt;br /&gt;
&lt;br /&gt;
// -&amp;gt;where(&amp;quot;title&amp;quot;,&amp;quot;like&amp;quot;,&amp;quot;%&amp;quot;.$keyword.&amp;quot;%&amp;quot;)&lt;br /&gt;
// -&amp;gt;orderBy('created_at','desc')&lt;br /&gt;
// -&amp;gt;paginate(10);&lt;br /&gt;
// In view show page numbers: {{$items-&amp;gt;links()}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* edit item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;NEW NAME&amp;quot;;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* delete item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;delete();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
* php artisan route:list&lt;br /&gt;
* Handle request&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$name = $request-&amp;gt;input('name', 'Default'); &lt;br /&gt;
$name = $request-&amp;gt;name;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Validation --&amp;gt; [https://laravel.com/docs/5.8/validation See Doc]&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$request-&amp;gt;validate([&lt;br /&gt;
    'title' =&amp;gt; 'required|max:255',&lt;br /&gt;
    'body' =&amp;gt; 'required',&lt;br /&gt;
]);&lt;br /&gt;
&lt;br /&gt;
// Frontend display error&lt;br /&gt;
@if ($errors-&amp;gt;any())&lt;br /&gt;
    &amp;lt;div class=&amp;quot;alert alert-danger&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            @foreach ($errors-&amp;gt;all() as $error)&lt;br /&gt;
                &amp;lt;li&amp;gt;{{ $error }}&amp;lt;/li&amp;gt;&lt;br /&gt;
            @endforeach&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* php artisan make:auth&lt;br /&gt;
&lt;br /&gt;
==== User System ====&lt;br /&gt;
* $user = Auth::user();&lt;br /&gt;
* $id = Auth::id();&lt;br /&gt;
* Protect route&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Protect in route&lt;br /&gt;
Route::get('index','homecontroller@index')-&amp;gt;middleware('auth');&lt;br /&gt;
&lt;br /&gt;
// Protect in constructor&lt;br /&gt;
public __construct{&lt;br /&gt;
    $this-&amp;gt;middleware('auth', ['except' =&amp;gt; ['getActivate', 'anotherMethod']]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Check if the user is loggedin&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if (Auth::check()) {&lt;br /&gt;
    // The user is logged in...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;br /&gt;
* Using Policy&lt;br /&gt;
* php artisan make:policy POLICY_NAME&lt;br /&gt;
* php artisan make:policy POLICY_NAME --model=MODEL // Create with basic CRUD&lt;br /&gt;
* Register Policy in &amp;lt;code&amp;gt;App/Providers/Authserviceprovider.php&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
    protected $policies = [&lt;br /&gt;
        Post::class =&amp;gt; PostPolicy::class,&lt;br /&gt;
    ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function update(User $user, Post $post){&lt;br /&gt;
    return $user-&amp;gt;id === $post-&amp;gt;user_id;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('update', $post)) {&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy without model&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function create(User $user){&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('create', Post::class)) { // ต้องบอก class เพื่อจะได้รู้ว่าจะไปเรียกจาก policy ของ class ไหน&lt;br /&gt;
    // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy in View&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
@can('update', $post)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@elsecan('create', App\Post::class)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Create New Post --&amp;gt;&lt;br /&gt;
@endcan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@if (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@unless (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can't Update The Post --&amp;gt;&lt;br /&gt;
@endunless&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
== Advanced ==&lt;br /&gt;
=== Middleware ===&lt;br /&gt;
&lt;br /&gt;
=== OAUTH ===&lt;br /&gt;
* [[https://laravel.com/docs/5.8/passport Laravel Passport (Library for OAUTH Server)]]&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Main_Page&amp;diff=138</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Main_Page&amp;diff=138"/>
		<updated>2019-04-14T17:50:52Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Knowledge Base */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teaching ==&lt;br /&gt;
=== ACIOI ===&lt;br /&gt;
&lt;br /&gt;
== Knowledge Base ==&lt;br /&gt;
=== Data Structure ===&lt;br /&gt;
* [[Linked List in C]]&lt;br /&gt;
&lt;br /&gt;
=== Algorithm ===&lt;br /&gt;
&lt;br /&gt;
=== ยกมาจาก wiki.acioi.in.th ===&lt;br /&gt;
* [[Old acioi wiki]]&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
* [[Basic Linux Command]]&lt;br /&gt;
&lt;br /&gt;
== Training ==&lt;br /&gt;
=== CourseVille ===&lt;br /&gt;
* [[Basic Laravel Training (for CV)]]&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=137</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=137"/>
		<updated>2019-03-21T17:03:04Z</updated>

		<summary type="html">&lt;p&gt;Tata: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;{{ config('app.name', 'Laravel') }}&amp;lt;/code&amp;gt;&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; ข้างบนสุดเพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;use Illuminate\Support\Facades\Schema;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; function boot เพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;Schema::defaultStringLength(191);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ลอง migrate default script&lt;br /&gt;
*: &amp;lt;pre&amp;gt;php artisan migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
* Sample&lt;br /&gt;
*: &amp;lt;!--syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    public function up()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::enableForeignKeyConstraints();&lt;br /&gt;
        Schema::create('cvdrive_comments', function (Blueprint $table) {&lt;br /&gt;
            $table-&amp;gt;increments('id');&lt;br /&gt;
            $table-&amp;gt;text('comment')-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_item_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('user_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_comment_id')-&amp;gt;unsigned()-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;timestamps();&lt;br /&gt;
&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_item_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_items')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('user_id')-&amp;gt;references('id')-&amp;gt;on('users')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_comment_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_comments')-&amp;gt;onDelete('cascade');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public function down()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::dropIfExists('cvdrive_comments');&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
* php artisan tinker&lt;br /&gt;
* new item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = new course();&lt;br /&gt;
$course-&amp;gt;number = &amp;quot;2110221&amp;quot;;&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;Computer Engineering Essentials&amp;quot;;&lt;br /&gt;
$course-&amp;gt;year = 2018;&lt;br /&gt;
$course-&amp;gt;semester = 2;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* duplicate item : $newcourse2 = $newcourse-&amp;gt;replicate();&lt;br /&gt;
* fetch item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$allcourses = course::all();&lt;br /&gt;
$findcourse = course::find(1);&lt;br /&gt;
$findcourse = course::where(number,&amp;quot;2110221&amp;quot;)-&amp;gt;get();&lt;br /&gt;
&lt;br /&gt;
// -&amp;gt;where(&amp;quot;title&amp;quot;,&amp;quot;like&amp;quot;,&amp;quot;%&amp;quot;.$keyword.&amp;quot;%&amp;quot;)&lt;br /&gt;
// -&amp;gt;orderBy('created_at','desc')&lt;br /&gt;
// -&amp;gt;paginate(10);&lt;br /&gt;
// In view show page numbers: {{$items-&amp;gt;links()}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* edit item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;NEW NAME&amp;quot;;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* delete item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;delete();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
* php artisan route:list&lt;br /&gt;
* Handle request&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$name = $request-&amp;gt;input('name', 'Default'); &lt;br /&gt;
$name = $request-&amp;gt;name;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Validation --&amp;gt; [https://laravel.com/docs/5.8/validation See Doc]&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$request-&amp;gt;validate([&lt;br /&gt;
    'title' =&amp;gt; 'required|max:255',&lt;br /&gt;
    'body' =&amp;gt; 'required',&lt;br /&gt;
]);&lt;br /&gt;
&lt;br /&gt;
// Frontend display error&lt;br /&gt;
@if ($errors-&amp;gt;any())&lt;br /&gt;
    &amp;lt;div class=&amp;quot;alert alert-danger&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            @foreach ($errors-&amp;gt;all() as $error)&lt;br /&gt;
                &amp;lt;li&amp;gt;{{ $error }}&amp;lt;/li&amp;gt;&lt;br /&gt;
            @endforeach&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* php artisan make:auth&lt;br /&gt;
&lt;br /&gt;
==== User System ====&lt;br /&gt;
* $user = Auth::user();&lt;br /&gt;
* $id = Auth::id();&lt;br /&gt;
* Protect route&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Protect in route&lt;br /&gt;
Route::get('index','homecontroller@index')-&amp;gt;middleware('auth');&lt;br /&gt;
&lt;br /&gt;
// Protect in constructor&lt;br /&gt;
public __construct{&lt;br /&gt;
    $this-&amp;gt;middleware('auth', ['except' =&amp;gt; ['getActivate', 'anotherMethod']]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Check if the user is loggedin&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if (Auth::check()) {&lt;br /&gt;
    // The user is logged in...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;br /&gt;
* Using Policy&lt;br /&gt;
* php artisan make:policy POLICY_NAME&lt;br /&gt;
* php artisan make:policy POLICY_NAME --model=MODEL // Create with basic CRUD&lt;br /&gt;
* Register Policy in &amp;lt;code&amp;gt;App/Providers/Authserviceprovider.php&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
    protected $policies = [&lt;br /&gt;
        Post::class =&amp;gt; PostPolicy::class,&lt;br /&gt;
    ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function update(User $user, Post $post){&lt;br /&gt;
    return $user-&amp;gt;id === $post-&amp;gt;user_id;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('update', $post)) {&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy without model&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function create(User $user){&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('create', Post::class)) { // ต้องบอก class เพื่อจะได้รู้ว่าจะไปเรียกจาก policy ของ class ไหน&lt;br /&gt;
    // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy in View&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
@can('update', $post)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@elsecan('create', App\Post::class)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Create New Post --&amp;gt;&lt;br /&gt;
@endcan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@if (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@unless (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can't Update The Post --&amp;gt;&lt;br /&gt;
@endunless&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
== Advanced ==&lt;br /&gt;
=== Middleware ===&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=136</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=136"/>
		<updated>2019-03-15T03:32:33Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Eloquent */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;{{ config('app.name', 'Laravel') }}&amp;lt;/code&amp;gt;&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; ข้างบนสุดเพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;use Illuminate\Support\Facades\Schema;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; function boot เพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;Schema::defaultStringLength(191);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ลอง migrate default script&lt;br /&gt;
*: &amp;lt;pre&amp;gt;php artisan migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
* Sample&lt;br /&gt;
*: &amp;lt;!--syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    public function up()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::enableForeignKeyConstraints();&lt;br /&gt;
        Schema::create('cvdrive_comments', function (Blueprint $table) {&lt;br /&gt;
            $table-&amp;gt;increments('id');&lt;br /&gt;
            $table-&amp;gt;text('comment')-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_item_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('user_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_comment_id')-&amp;gt;unsigned()-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;timestamps();&lt;br /&gt;
&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_item_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_items')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('user_id')-&amp;gt;references('id')-&amp;gt;on('users')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_comment_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_comments')-&amp;gt;onDelete('cascade');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public function down()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::dropIfExists('cvdrive_comments');&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
* php artisan tinker&lt;br /&gt;
* new item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = new course();&lt;br /&gt;
$course-&amp;gt;number = &amp;quot;2110221&amp;quot;;&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;Computer Engineering Essentials&amp;quot;;&lt;br /&gt;
$course-&amp;gt;year = 2018;&lt;br /&gt;
$course-&amp;gt;semester = 2;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* duplicate item : $newcourse2 = $newcourse-&amp;gt;replicate();&lt;br /&gt;
* fetch item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$allcourses = course::all();&lt;br /&gt;
$findcourse = course::find(1);&lt;br /&gt;
$findcourse = course::where(number,&amp;quot;2110221&amp;quot;)-&amp;gt;get();&lt;br /&gt;
&lt;br /&gt;
// -&amp;gt;where(&amp;quot;title&amp;quot;,&amp;quot;like&amp;quot;,&amp;quot;%&amp;quot;.$keyword.&amp;quot;%&amp;quot;)&lt;br /&gt;
// -&amp;gt;orderBy('created_at','desc')&lt;br /&gt;
// -&amp;gt;paginate(10);&lt;br /&gt;
// In view show page numbers: {{$items-&amp;gt;links()}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* edit item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;NEW NAME&amp;quot;;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* delete item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;delete();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
* php artisan route:list&lt;br /&gt;
* Handle request&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$name = $request-&amp;gt;input('name', 'Default'); &lt;br /&gt;
$name = $request-&amp;gt;name;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Validation --&amp;gt; [https://laravel.com/docs/5.8/validation See Doc]&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$request-&amp;gt;validate([&lt;br /&gt;
    'title' =&amp;gt; 'required|max:255',&lt;br /&gt;
    'body' =&amp;gt; 'required',&lt;br /&gt;
]);&lt;br /&gt;
&lt;br /&gt;
// Frontend display error&lt;br /&gt;
@if ($errors-&amp;gt;any())&lt;br /&gt;
    &amp;lt;div class=&amp;quot;alert alert-danger&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            @foreach ($errors-&amp;gt;all() as $error)&lt;br /&gt;
                &amp;lt;li&amp;gt;{{ $error }}&amp;lt;/li&amp;gt;&lt;br /&gt;
            @endforeach&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* php artisan make:auth&lt;br /&gt;
&lt;br /&gt;
==== User System ====&lt;br /&gt;
* $user = Auth::user();&lt;br /&gt;
* $id = Auth::id();&lt;br /&gt;
* Protect route&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Protect in route&lt;br /&gt;
Route::get('index','homecontroller@index')-&amp;gt;middleware('auth');&lt;br /&gt;
&lt;br /&gt;
// Protect in constructor&lt;br /&gt;
public __construct{&lt;br /&gt;
    $this-&amp;gt;middleware('auth', ['except' =&amp;gt; ['getActivate', 'anotherMethod']]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Check if the user is loggedin&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if (Auth::check()) {&lt;br /&gt;
    // The user is logged in...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;br /&gt;
* Using Policy&lt;br /&gt;
* php artisan make:policy POLICY_NAME&lt;br /&gt;
* php artisan make:policy POLICY_NAME --model=MODEL // Create with basic CRUD&lt;br /&gt;
* Register Policy in &amp;lt;code&amp;gt;App/Providers/Authserviceprovider.php&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
    protected $policies = [&lt;br /&gt;
        Post::class =&amp;gt; PostPolicy::class,&lt;br /&gt;
    ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function update(User $user, Post $post){&lt;br /&gt;
    return $user-&amp;gt;id === $post-&amp;gt;user_id;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('update', $post)) {&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy without model&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function create(User $user){&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('create', Post::class)) { // ต้องบอก class เพื่อจะได้รู้ว่าจะไปเรียกจาก policy ของ class ไหน&lt;br /&gt;
    // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy in View&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
@can('update', $post)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@elsecan('create', App\Post::class)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Create New Post --&amp;gt;&lt;br /&gt;
@endcan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@if (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@unless (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can't Update The Post --&amp;gt;&lt;br /&gt;
@endunless&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=135</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=135"/>
		<updated>2019-03-15T02:22:20Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Eloquent */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;{{ config('app.name', 'Laravel') }}&amp;lt;/code&amp;gt;&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; ข้างบนสุดเพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;use Illuminate\Support\Facades\Schema;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; function boot เพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;Schema::defaultStringLength(191);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ลอง migrate default script&lt;br /&gt;
*: &amp;lt;pre&amp;gt;php artisan migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
* Sample&lt;br /&gt;
*: &amp;lt;!--syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    public function up()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::enableForeignKeyConstraints();&lt;br /&gt;
        Schema::create('cvdrive_comments', function (Blueprint $table) {&lt;br /&gt;
            $table-&amp;gt;increments('id');&lt;br /&gt;
            $table-&amp;gt;text('comment')-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_item_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('user_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_comment_id')-&amp;gt;unsigned()-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;timestamps();&lt;br /&gt;
&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_item_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_items')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('user_id')-&amp;gt;references('id')-&amp;gt;on('users')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_comment_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_comments')-&amp;gt;onDelete('cascade');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public function down()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::dropIfExists('cvdrive_comments');&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
* php artisan tinker&lt;br /&gt;
* new item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = new course();&lt;br /&gt;
$course-&amp;gt;number = &amp;quot;2110221&amp;quot;;&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;Computer Engineering Essentials&amp;quot;;&lt;br /&gt;
$course-&amp;gt;year = 2018;&lt;br /&gt;
$course-&amp;gt;semester = 2;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* fetch item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$allcourses = course::all();&lt;br /&gt;
$findcourse = course::find(1);&lt;br /&gt;
$findcourse = course::where(number,&amp;quot;2110221&amp;quot;)-&amp;gt;get();&lt;br /&gt;
&lt;br /&gt;
// -&amp;gt;where(&amp;quot;title&amp;quot;,&amp;quot;like&amp;quot;,&amp;quot;%&amp;quot;.$keyword.&amp;quot;%&amp;quot;)&lt;br /&gt;
// -&amp;gt;orderBy('created_at','desc')&lt;br /&gt;
// -&amp;gt;paginate(10);&lt;br /&gt;
// In view show page numbers: {{$items-&amp;gt;links()}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* edit item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;NEW NAME&amp;quot;;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* delete item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;delete();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
* php artisan route:list&lt;br /&gt;
* Handle request&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$name = $request-&amp;gt;input('name', 'Default'); &lt;br /&gt;
$name = $request-&amp;gt;name;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Validation --&amp;gt; [https://laravel.com/docs/5.8/validation See Doc]&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$request-&amp;gt;validate([&lt;br /&gt;
    'title' =&amp;gt; 'required|max:255',&lt;br /&gt;
    'body' =&amp;gt; 'required',&lt;br /&gt;
]);&lt;br /&gt;
&lt;br /&gt;
// Frontend display error&lt;br /&gt;
@if ($errors-&amp;gt;any())&lt;br /&gt;
    &amp;lt;div class=&amp;quot;alert alert-danger&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            @foreach ($errors-&amp;gt;all() as $error)&lt;br /&gt;
                &amp;lt;li&amp;gt;{{ $error }}&amp;lt;/li&amp;gt;&lt;br /&gt;
            @endforeach&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* php artisan make:auth&lt;br /&gt;
&lt;br /&gt;
==== User System ====&lt;br /&gt;
* $user = Auth::user();&lt;br /&gt;
* $id = Auth::id();&lt;br /&gt;
* Protect route&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Protect in route&lt;br /&gt;
Route::get('index','homecontroller@index')-&amp;gt;middleware('auth');&lt;br /&gt;
&lt;br /&gt;
// Protect in constructor&lt;br /&gt;
public __construct{&lt;br /&gt;
    $this-&amp;gt;middleware('auth', ['except' =&amp;gt; ['getActivate', 'anotherMethod']]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Check if the user is loggedin&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if (Auth::check()) {&lt;br /&gt;
    // The user is logged in...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;br /&gt;
* Using Policy&lt;br /&gt;
* php artisan make:policy POLICY_NAME&lt;br /&gt;
* php artisan make:policy POLICY_NAME --model=MODEL // Create with basic CRUD&lt;br /&gt;
* Register Policy in &amp;lt;code&amp;gt;App/Providers/Authserviceprovider.php&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
    protected $policies = [&lt;br /&gt;
        Post::class =&amp;gt; PostPolicy::class,&lt;br /&gt;
    ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function update(User $user, Post $post){&lt;br /&gt;
    return $user-&amp;gt;id === $post-&amp;gt;user_id;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('update', $post)) {&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy without model&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function create(User $user){&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('create', Post::class)) { // ต้องบอก class เพื่อจะได้รู้ว่าจะไปเรียกจาก policy ของ class ไหน&lt;br /&gt;
    // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy in View&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
@can('update', $post)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@elsecan('create', App\Post::class)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Create New Post --&amp;gt;&lt;br /&gt;
@endcan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@if (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@unless (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can't Update The Post --&amp;gt;&lt;br /&gt;
@endunless&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=134</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=134"/>
		<updated>2019-03-15T02:21:37Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Model &amp;amp; DB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;{{ config('app.name', 'Laravel') }}&amp;lt;/code&amp;gt;&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; ข้างบนสุดเพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;use Illuminate\Support\Facades\Schema;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; function boot เพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;Schema::defaultStringLength(191);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ลอง migrate default script&lt;br /&gt;
*: &amp;lt;pre&amp;gt;php artisan migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
* Sample&lt;br /&gt;
*: &amp;lt;!--syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    public function up()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::enableForeignKeyConstraints();&lt;br /&gt;
        Schema::create('cvdrive_comments', function (Blueprint $table) {&lt;br /&gt;
            $table-&amp;gt;increments('id');&lt;br /&gt;
            $table-&amp;gt;text('comment')-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_item_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('user_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_comment_id')-&amp;gt;unsigned()-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;timestamps();&lt;br /&gt;
&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_item_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_items')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('user_id')-&amp;gt;references('id')-&amp;gt;on('users')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_comment_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_comments')-&amp;gt;onDelete('cascade');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public function down()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::dropIfExists('cvdrive_comments');&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
* new item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = new course();&lt;br /&gt;
$course-&amp;gt;number = &amp;quot;2110221&amp;quot;;&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;Computer Engineering Essentials&amp;quot;;&lt;br /&gt;
$course-&amp;gt;year = 2018;&lt;br /&gt;
$course-&amp;gt;semester = 2;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* fetch item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$allcourses = course::all();&lt;br /&gt;
$findcourse = course::find(1);&lt;br /&gt;
$findcourse = course::where(number,&amp;quot;2110221&amp;quot;)-&amp;gt;get();&lt;br /&gt;
&lt;br /&gt;
// -&amp;gt;where(&amp;quot;title&amp;quot;,&amp;quot;like&amp;quot;,&amp;quot;%&amp;quot;.$keyword.&amp;quot;%&amp;quot;)&lt;br /&gt;
// -&amp;gt;orderBy('created_at','desc')&lt;br /&gt;
// -&amp;gt;paginate(10);&lt;br /&gt;
// In view show page numbers: {{$items-&amp;gt;links()}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* edit item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;NEW NAME&amp;quot;;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* delete item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;delete();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
* php artisan route:list&lt;br /&gt;
* Handle request&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$name = $request-&amp;gt;input('name', 'Default'); &lt;br /&gt;
$name = $request-&amp;gt;name;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Validation --&amp;gt; [https://laravel.com/docs/5.8/validation See Doc]&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$request-&amp;gt;validate([&lt;br /&gt;
    'title' =&amp;gt; 'required|max:255',&lt;br /&gt;
    'body' =&amp;gt; 'required',&lt;br /&gt;
]);&lt;br /&gt;
&lt;br /&gt;
// Frontend display error&lt;br /&gt;
@if ($errors-&amp;gt;any())&lt;br /&gt;
    &amp;lt;div class=&amp;quot;alert alert-danger&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            @foreach ($errors-&amp;gt;all() as $error)&lt;br /&gt;
                &amp;lt;li&amp;gt;{{ $error }}&amp;lt;/li&amp;gt;&lt;br /&gt;
            @endforeach&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* php artisan make:auth&lt;br /&gt;
&lt;br /&gt;
==== User System ====&lt;br /&gt;
* $user = Auth::user();&lt;br /&gt;
* $id = Auth::id();&lt;br /&gt;
* Protect route&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Protect in route&lt;br /&gt;
Route::get('index','homecontroller@index')-&amp;gt;middleware('auth');&lt;br /&gt;
&lt;br /&gt;
// Protect in constructor&lt;br /&gt;
public __construct{&lt;br /&gt;
    $this-&amp;gt;middleware('auth', ['except' =&amp;gt; ['getActivate', 'anotherMethod']]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Check if the user is loggedin&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if (Auth::check()) {&lt;br /&gt;
    // The user is logged in...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;br /&gt;
* Using Policy&lt;br /&gt;
* php artisan make:policy POLICY_NAME&lt;br /&gt;
* php artisan make:policy POLICY_NAME --model=MODEL // Create with basic CRUD&lt;br /&gt;
* Register Policy in &amp;lt;code&amp;gt;App/Providers/Authserviceprovider.php&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
    protected $policies = [&lt;br /&gt;
        Post::class =&amp;gt; PostPolicy::class,&lt;br /&gt;
    ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function update(User $user, Post $post){&lt;br /&gt;
    return $user-&amp;gt;id === $post-&amp;gt;user_id;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('update', $post)) {&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy without model&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function create(User $user){&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('create', Post::class)) { // ต้องบอก class เพื่อจะได้รู้ว่าจะไปเรียกจาก policy ของ class ไหน&lt;br /&gt;
    // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy in View&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
@can('update', $post)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@elsecan('create', App\Post::class)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Create New Post --&amp;gt;&lt;br /&gt;
@endcan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@if (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@unless (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can't Update The Post --&amp;gt;&lt;br /&gt;
@endunless&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=133</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=133"/>
		<updated>2019-03-14T17:01:23Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* View (Blade Template) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;{{ config('app.name', 'Laravel') }}&amp;lt;/code&amp;gt;&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; ข้างบนสุดเพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;use Illuminate\Support\Facades\Schema;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; function boot เพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;Schema::defaultStringLength(191);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ลอง migrate default script&lt;br /&gt;
*: &amp;lt;pre&amp;gt;php artisan migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
* Sample&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Support\Facades\Schema;&lt;br /&gt;
use Illuminate\Database\Schema\Blueprint;&lt;br /&gt;
use Illuminate\Database\Migrations\Migration;&lt;br /&gt;
&lt;br /&gt;
class CreateCvdriveCommentsTable extends Migration&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * Run the migrations.&lt;br /&gt;
     *&lt;br /&gt;
     * @return void&lt;br /&gt;
     */&lt;br /&gt;
    public function up()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::enableForeignKeyConstraints();&lt;br /&gt;
        Schema::create('cvdrive_comments', function (Blueprint $table) {&lt;br /&gt;
            $table-&amp;gt;increments('id');&lt;br /&gt;
            $table-&amp;gt;text('comment')-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_item_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('user_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_comment_id')-&amp;gt;unsigned()-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;timestamps();&lt;br /&gt;
&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_item_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_items')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('user_id')-&amp;gt;references('id')-&amp;gt;on('users')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_comment_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_comments')-&amp;gt;onDelete('cascade');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Reverse the migrations.&lt;br /&gt;
     *&lt;br /&gt;
     * @return void&lt;br /&gt;
     */&lt;br /&gt;
    public function down()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::dropIfExists('cvdrive_comments');&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
* new item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = new course();&lt;br /&gt;
$course-&amp;gt;number = &amp;quot;2110221&amp;quot;;&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;Computer Engineering Essentials&amp;quot;;&lt;br /&gt;
$course-&amp;gt;year = 2018;&lt;br /&gt;
$course-&amp;gt;semester = 2;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* fetch item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$allcourses = course::all();&lt;br /&gt;
$findcourse = course::find(1);&lt;br /&gt;
$findcourse = course::where(number,&amp;quot;2110221&amp;quot;)-&amp;gt;get();&lt;br /&gt;
&lt;br /&gt;
// -&amp;gt;where(&amp;quot;title&amp;quot;,&amp;quot;like&amp;quot;,&amp;quot;%&amp;quot;.$keyword.&amp;quot;%&amp;quot;)&lt;br /&gt;
// -&amp;gt;orderBy('created_at','desc')&lt;br /&gt;
// -&amp;gt;paginate(10);&lt;br /&gt;
// In view show page numbers: {{$items-&amp;gt;links()}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* edit item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;NEW NAME&amp;quot;;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* delete item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;delete();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
* php artisan route:list&lt;br /&gt;
* Handle request&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$name = $request-&amp;gt;input('name', 'Default'); &lt;br /&gt;
$name = $request-&amp;gt;name;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Validation --&amp;gt; [https://laravel.com/docs/5.8/validation See Doc]&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$request-&amp;gt;validate([&lt;br /&gt;
    'title' =&amp;gt; 'required|max:255',&lt;br /&gt;
    'body' =&amp;gt; 'required',&lt;br /&gt;
]);&lt;br /&gt;
&lt;br /&gt;
// Frontend display error&lt;br /&gt;
@if ($errors-&amp;gt;any())&lt;br /&gt;
    &amp;lt;div class=&amp;quot;alert alert-danger&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            @foreach ($errors-&amp;gt;all() as $error)&lt;br /&gt;
                &amp;lt;li&amp;gt;{{ $error }}&amp;lt;/li&amp;gt;&lt;br /&gt;
            @endforeach&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* php artisan make:auth&lt;br /&gt;
&lt;br /&gt;
==== User System ====&lt;br /&gt;
* $user = Auth::user();&lt;br /&gt;
* $id = Auth::id();&lt;br /&gt;
* Protect route&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Protect in route&lt;br /&gt;
Route::get('index','homecontroller@index')-&amp;gt;middleware('auth');&lt;br /&gt;
&lt;br /&gt;
// Protect in constructor&lt;br /&gt;
public __construct{&lt;br /&gt;
    $this-&amp;gt;middleware('auth', ['except' =&amp;gt; ['getActivate', 'anotherMethod']]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Check if the user is loggedin&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if (Auth::check()) {&lt;br /&gt;
    // The user is logged in...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;br /&gt;
* Using Policy&lt;br /&gt;
* php artisan make:policy POLICY_NAME&lt;br /&gt;
* php artisan make:policy POLICY_NAME --model=MODEL // Create with basic CRUD&lt;br /&gt;
* Register Policy in &amp;lt;code&amp;gt;App/Providers/Authserviceprovider.php&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
    protected $policies = [&lt;br /&gt;
        Post::class =&amp;gt; PostPolicy::class,&lt;br /&gt;
    ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function update(User $user, Post $post){&lt;br /&gt;
    return $user-&amp;gt;id === $post-&amp;gt;user_id;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('update', $post)) {&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy without model&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function create(User $user){&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('create', Post::class)) { // ต้องบอก class เพื่อจะได้รู้ว่าจะไปเรียกจาก policy ของ class ไหน&lt;br /&gt;
    // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy in View&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
@can('update', $post)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@elsecan('create', App\Post::class)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Create New Post --&amp;gt;&lt;br /&gt;
@endcan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@if (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@unless (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can't Update The Post --&amp;gt;&lt;br /&gt;
@endunless&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=132</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=132"/>
		<updated>2019-03-14T16:59:47Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Model &amp;amp; DB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&lt;br /&gt;
* {{ config('app.name', 'Laravel') }}&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; ข้างบนสุดเพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;use Illuminate\Support\Facades\Schema;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; function boot เพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;Schema::defaultStringLength(191);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ลอง migrate default script&lt;br /&gt;
*: &amp;lt;pre&amp;gt;php artisan migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
* Sample&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Support\Facades\Schema;&lt;br /&gt;
use Illuminate\Database\Schema\Blueprint;&lt;br /&gt;
use Illuminate\Database\Migrations\Migration;&lt;br /&gt;
&lt;br /&gt;
class CreateCvdriveCommentsTable extends Migration&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * Run the migrations.&lt;br /&gt;
     *&lt;br /&gt;
     * @return void&lt;br /&gt;
     */&lt;br /&gt;
    public function up()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::enableForeignKeyConstraints();&lt;br /&gt;
        Schema::create('cvdrive_comments', function (Blueprint $table) {&lt;br /&gt;
            $table-&amp;gt;increments('id');&lt;br /&gt;
            $table-&amp;gt;text('comment')-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_item_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('user_id')-&amp;gt;unsigned();&lt;br /&gt;
            $table-&amp;gt;integer('cvdrive_comment_id')-&amp;gt;unsigned()-&amp;gt;nullable($value = true);&lt;br /&gt;
            $table-&amp;gt;timestamps();&lt;br /&gt;
&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_item_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_items')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('user_id')-&amp;gt;references('id')-&amp;gt;on('users')-&amp;gt;onDelete('cascade');&lt;br /&gt;
            $table-&amp;gt;foreign('cvdrive_comment_id')-&amp;gt;references('id')-&amp;gt;on('cvdrive_comments')-&amp;gt;onDelete('cascade');&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Reverse the migrations.&lt;br /&gt;
     *&lt;br /&gt;
     * @return void&lt;br /&gt;
     */&lt;br /&gt;
    public function down()&lt;br /&gt;
    {&lt;br /&gt;
        Schema::dropIfExists('cvdrive_comments');&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
* new item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = new course();&lt;br /&gt;
$course-&amp;gt;number = &amp;quot;2110221&amp;quot;;&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;Computer Engineering Essentials&amp;quot;;&lt;br /&gt;
$course-&amp;gt;year = 2018;&lt;br /&gt;
$course-&amp;gt;semester = 2;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* fetch item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$allcourses = course::all();&lt;br /&gt;
$findcourse = course::find(1);&lt;br /&gt;
$findcourse = course::where(number,&amp;quot;2110221&amp;quot;)-&amp;gt;get();&lt;br /&gt;
&lt;br /&gt;
// -&amp;gt;where(&amp;quot;title&amp;quot;,&amp;quot;like&amp;quot;,&amp;quot;%&amp;quot;.$keyword.&amp;quot;%&amp;quot;)&lt;br /&gt;
// -&amp;gt;orderBy('created_at','desc')&lt;br /&gt;
// -&amp;gt;paginate(10);&lt;br /&gt;
// In view show page numbers: {{$items-&amp;gt;links()}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* edit item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;NEW NAME&amp;quot;;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* delete item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;delete();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
* php artisan route:list&lt;br /&gt;
* Handle request&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$name = $request-&amp;gt;input('name', 'Default'); &lt;br /&gt;
$name = $request-&amp;gt;name;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Validation --&amp;gt; [https://laravel.com/docs/5.8/validation See Doc]&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$request-&amp;gt;validate([&lt;br /&gt;
    'title' =&amp;gt; 'required|max:255',&lt;br /&gt;
    'body' =&amp;gt; 'required',&lt;br /&gt;
]);&lt;br /&gt;
&lt;br /&gt;
// Frontend display error&lt;br /&gt;
@if ($errors-&amp;gt;any())&lt;br /&gt;
    &amp;lt;div class=&amp;quot;alert alert-danger&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            @foreach ($errors-&amp;gt;all() as $error)&lt;br /&gt;
                &amp;lt;li&amp;gt;{{ $error }}&amp;lt;/li&amp;gt;&lt;br /&gt;
            @endforeach&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* php artisan make:auth&lt;br /&gt;
&lt;br /&gt;
==== User System ====&lt;br /&gt;
* $user = Auth::user();&lt;br /&gt;
* $id = Auth::id();&lt;br /&gt;
* Protect route&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Protect in route&lt;br /&gt;
Route::get('index','homecontroller@index')-&amp;gt;middleware('auth');&lt;br /&gt;
&lt;br /&gt;
// Protect in constructor&lt;br /&gt;
public __construct{&lt;br /&gt;
    $this-&amp;gt;middleware('auth', ['except' =&amp;gt; ['getActivate', 'anotherMethod']]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Check if the user is loggedin&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if (Auth::check()) {&lt;br /&gt;
    // The user is logged in...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;br /&gt;
* Using Policy&lt;br /&gt;
* php artisan make:policy POLICY_NAME&lt;br /&gt;
* php artisan make:policy POLICY_NAME --model=MODEL // Create with basic CRUD&lt;br /&gt;
* Register Policy in &amp;lt;code&amp;gt;App/Providers/Authserviceprovider.php&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
    protected $policies = [&lt;br /&gt;
        Post::class =&amp;gt; PostPolicy::class,&lt;br /&gt;
    ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function update(User $user, Post $post){&lt;br /&gt;
    return $user-&amp;gt;id === $post-&amp;gt;user_id;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('update', $post)) {&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy without model&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function create(User $user){&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('create', Post::class)) { // ต้องบอก class เพื่อจะได้รู้ว่าจะไปเรียกจาก policy ของ class ไหน&lt;br /&gt;
    // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy in View&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
@can('update', $post)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@elsecan('create', App\Post::class)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Create New Post --&amp;gt;&lt;br /&gt;
@endcan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@if (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@unless (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can't Update The Post --&amp;gt;&lt;br /&gt;
@endunless&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=131</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=131"/>
		<updated>2019-03-14T16:57:49Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Authentication */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&lt;br /&gt;
* {{ config('app.name', 'Laravel') }}&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; ข้างบนสุดเพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;use Illuminate\Support\Facades\Schema;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; function boot เพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;Schema::defaultStringLength(191);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ลอง migrate default script&lt;br /&gt;
*: &amp;lt;pre&amp;gt;php artisan migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
* new item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = new course();&lt;br /&gt;
$course-&amp;gt;number = &amp;quot;2110221&amp;quot;;&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;Computer Engineering Essentials&amp;quot;;&lt;br /&gt;
$course-&amp;gt;year = 2018;&lt;br /&gt;
$course-&amp;gt;semester = 2;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* fetch item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$allcourses = course::all();&lt;br /&gt;
$findcourse = course::find(1);&lt;br /&gt;
$findcourse = course::where(number,&amp;quot;2110221&amp;quot;)-&amp;gt;get();&lt;br /&gt;
&lt;br /&gt;
// -&amp;gt;where(&amp;quot;title&amp;quot;,&amp;quot;like&amp;quot;,&amp;quot;%&amp;quot;.$keyword.&amp;quot;%&amp;quot;)&lt;br /&gt;
// -&amp;gt;orderBy('created_at','desc')&lt;br /&gt;
// -&amp;gt;paginate(10);&lt;br /&gt;
// In view show page numbers: {{$items-&amp;gt;links()}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* edit item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;NEW NAME&amp;quot;;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* delete item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;delete();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
* php artisan route:list&lt;br /&gt;
* Handle request&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$name = $request-&amp;gt;input('name', 'Default'); &lt;br /&gt;
$name = $request-&amp;gt;name;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Validation --&amp;gt; [https://laravel.com/docs/5.8/validation See Doc]&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$request-&amp;gt;validate([&lt;br /&gt;
    'title' =&amp;gt; 'required|max:255',&lt;br /&gt;
    'body' =&amp;gt; 'required',&lt;br /&gt;
]);&lt;br /&gt;
&lt;br /&gt;
// Frontend display error&lt;br /&gt;
@if ($errors-&amp;gt;any())&lt;br /&gt;
    &amp;lt;div class=&amp;quot;alert alert-danger&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            @foreach ($errors-&amp;gt;all() as $error)&lt;br /&gt;
                &amp;lt;li&amp;gt;{{ $error }}&amp;lt;/li&amp;gt;&lt;br /&gt;
            @endforeach&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* php artisan make:auth&lt;br /&gt;
&lt;br /&gt;
==== User System ====&lt;br /&gt;
* $user = Auth::user();&lt;br /&gt;
* $id = Auth::id();&lt;br /&gt;
* Protect route&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Protect in route&lt;br /&gt;
Route::get('index','homecontroller@index')-&amp;gt;middleware('auth');&lt;br /&gt;
&lt;br /&gt;
// Protect in constructor&lt;br /&gt;
public __construct{&lt;br /&gt;
    $this-&amp;gt;middleware('auth', ['except' =&amp;gt; ['getActivate', 'anotherMethod']]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Check if the user is loggedin&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if (Auth::check()) {&lt;br /&gt;
    // The user is logged in...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;br /&gt;
* Using Policy&lt;br /&gt;
* php artisan make:policy POLICY_NAME&lt;br /&gt;
* php artisan make:policy POLICY_NAME --model=MODEL // Create with basic CRUD&lt;br /&gt;
* Register Policy in &amp;lt;code&amp;gt;App/Providers/Authserviceprovider.php&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
    protected $policies = [&lt;br /&gt;
        Post::class =&amp;gt; PostPolicy::class,&lt;br /&gt;
    ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function update(User $user, Post $post){&lt;br /&gt;
    return $user-&amp;gt;id === $post-&amp;gt;user_id;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('update', $post)) {&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy without model&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function create(User $user){&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Check Policy&lt;br /&gt;
if ($user-&amp;gt;can('create', Post::class)) { // ต้องบอก class เพื่อจะได้รู้ว่าจะไปเรียกจาก policy ของ class ไหน&lt;br /&gt;
    // &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Writing Policy in View&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
@can('update', $post)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@elsecan('create', App\Post::class)&lt;br /&gt;
    &amp;lt;!-- The Current User Can Create New Post --&amp;gt;&lt;br /&gt;
@endcan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@if (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can Update The Post --&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@unless (Auth::user()-&amp;gt;can('update', $post))&lt;br /&gt;
    &amp;lt;!-- The Current User Can't Update The Post --&amp;gt;&lt;br /&gt;
@endunless&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=130</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=130"/>
		<updated>2019-03-14T16:27:38Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Handle CRUD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&lt;br /&gt;
* {{ config('app.name', 'Laravel') }}&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; ข้างบนสุดเพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;use Illuminate\Support\Facades\Schema;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; function boot เพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;Schema::defaultStringLength(191);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ลอง migrate default script&lt;br /&gt;
*: &amp;lt;pre&amp;gt;php artisan migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
* new item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = new course();&lt;br /&gt;
$course-&amp;gt;number = &amp;quot;2110221&amp;quot;;&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;Computer Engineering Essentials&amp;quot;;&lt;br /&gt;
$course-&amp;gt;year = 2018;&lt;br /&gt;
$course-&amp;gt;semester = 2;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* fetch item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$allcourses = course::all();&lt;br /&gt;
$findcourse = course::find(1);&lt;br /&gt;
$findcourse = course::where(number,&amp;quot;2110221&amp;quot;)-&amp;gt;get();&lt;br /&gt;
&lt;br /&gt;
// -&amp;gt;where(&amp;quot;title&amp;quot;,&amp;quot;like&amp;quot;,&amp;quot;%&amp;quot;.$keyword.&amp;quot;%&amp;quot;)&lt;br /&gt;
// -&amp;gt;orderBy('created_at','desc')&lt;br /&gt;
// -&amp;gt;paginate(10);&lt;br /&gt;
// In view show page numbers: {{$items-&amp;gt;links()}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* edit item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;NEW NAME&amp;quot;;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* delete item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;delete();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
* php artisan route:list&lt;br /&gt;
* Handle request&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$name = $request-&amp;gt;input('name', 'Default'); &lt;br /&gt;
$name = $request-&amp;gt;name;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Validation --&amp;gt; [https://laravel.com/docs/5.8/validation See Doc]&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$request-&amp;gt;validate([&lt;br /&gt;
    'title' =&amp;gt; 'required|max:255',&lt;br /&gt;
    'body' =&amp;gt; 'required',&lt;br /&gt;
]);&lt;br /&gt;
&lt;br /&gt;
// Frontend display error&lt;br /&gt;
@if ($errors-&amp;gt;any())&lt;br /&gt;
    &amp;lt;div class=&amp;quot;alert alert-danger&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
            @foreach ($errors-&amp;gt;all() as $error)&lt;br /&gt;
                &amp;lt;li&amp;gt;{{ $error }}&amp;lt;/li&amp;gt;&lt;br /&gt;
            @endforeach&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
@endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== User System ====&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=129</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=129"/>
		<updated>2019-03-14T11:48:31Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Eloquent */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&lt;br /&gt;
* {{ config('app.name', 'Laravel') }}&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; ข้างบนสุดเพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;use Illuminate\Support\Facades\Schema;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; function boot เพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;Schema::defaultStringLength(191);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ลอง migrate default script&lt;br /&gt;
*: &amp;lt;pre&amp;gt;php artisan migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
* new item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = new course();&lt;br /&gt;
$course-&amp;gt;number = &amp;quot;2110221&amp;quot;;&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;Computer Engineering Essentials&amp;quot;;&lt;br /&gt;
$course-&amp;gt;year = 2018;&lt;br /&gt;
$course-&amp;gt;semester = 2;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* fetch item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$allcourses = course::all();&lt;br /&gt;
$findcourse = course::find(1);&lt;br /&gt;
$findcourse = course::where(number,&amp;quot;2110221&amp;quot;)-&amp;gt;get();&lt;br /&gt;
&lt;br /&gt;
// -&amp;gt;where(&amp;quot;title&amp;quot;,&amp;quot;like&amp;quot;,&amp;quot;%&amp;quot;.$keyword.&amp;quot;%&amp;quot;)&lt;br /&gt;
// -&amp;gt;orderBy('created_at','desc')&lt;br /&gt;
// -&amp;gt;paginate(10);&lt;br /&gt;
// In view show page numbers: {{$items-&amp;gt;links()}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* edit item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;NEW NAME&amp;quot;;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* delete item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;delete();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
* php artisan route:list&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== User System ====&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=128</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=128"/>
		<updated>2019-03-14T11:47:54Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Handle CRUD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&lt;br /&gt;
* {{ config('app.name', 'Laravel') }}&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; ข้างบนสุดเพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;use Illuminate\Support\Facades\Schema;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; function boot เพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;Schema::defaultStringLength(191);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ลอง migrate default script&lt;br /&gt;
*: &amp;lt;pre&amp;gt;php artisan migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
* new item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = new course();&lt;br /&gt;
$course-&amp;gt;number = &amp;quot;2110221&amp;quot;;&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;Computer Engineering Essentials&amp;quot;;&lt;br /&gt;
$course-&amp;gt;year = 2018;&lt;br /&gt;
$course-&amp;gt;semester = 2;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* fetch item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$allcourses = course::all();&lt;br /&gt;
$findcourse = course::find(1);&lt;br /&gt;
$findcourse = course::where(number,&amp;quot;2110221&amp;quot;)-&amp;gt;get();&lt;br /&gt;
&lt;br /&gt;
// -&amp;gt;where(&amp;quot;title&amp;quot;,&amp;quot;like&amp;quot;,&amp;quot;%&amp;quot;.$keyword.&amp;quot;%&amp;quot;)&lt;br /&gt;
// -&amp;gt;orderBy('created_at','desc')&lt;br /&gt;
// -&amp;gt;paginate(10);&lt;br /&gt;
// In view show page numbers: {{$items-&amp;gt;links()}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* edit item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;NEW NAME&amp;quot;;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
* php artisan route:list&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== User System ====&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=127</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=127"/>
		<updated>2019-03-14T11:47:34Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Model &amp;amp; DB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&lt;br /&gt;
* {{ config('app.name', 'Laravel') }}&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; ข้างบนสุดเพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;use Illuminate\Support\Facades\Schema;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; function boot เพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;Schema::defaultStringLength(191);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ลอง migrate default script&lt;br /&gt;
*: &amp;lt;pre&amp;gt;php artisan migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
* new item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = new course();&lt;br /&gt;
$course-&amp;gt;number = &amp;quot;2110221&amp;quot;;&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;Computer Engineering Essentials&amp;quot;;&lt;br /&gt;
$course-&amp;gt;year = 2018;&lt;br /&gt;
$course-&amp;gt;semester = 2;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* fetch item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$allcourses = course::all();&lt;br /&gt;
$findcourse = course::find(1);&lt;br /&gt;
$findcourse = course::where(number,&amp;quot;2110221&amp;quot;)-&amp;gt;get();&lt;br /&gt;
&lt;br /&gt;
// -&amp;gt;where(&amp;quot;title&amp;quot;,&amp;quot;like&amp;quot;,&amp;quot;%&amp;quot;.$keyword.&amp;quot;%&amp;quot;)&lt;br /&gt;
// -&amp;gt;orderBy('created_at','desc')&lt;br /&gt;
// -&amp;gt;paginate(10);&lt;br /&gt;
// In view show page numbers: {{$items-&amp;gt;links()}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* edit item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;NEW NAME&amp;quot;;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== User System ====&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=126</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=126"/>
		<updated>2019-03-14T11:44:46Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Model &amp;amp; DB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&lt;br /&gt;
* {{ config('app.name', 'Laravel') }}&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; ข้างบนสุดเพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;use Illuminate\Support\Facades\Schema;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; function boot เพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;Schema::defaultStringLength(191);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ลอง migrate default script&lt;br /&gt;
*: &amp;lt;pre&amp;gt;php artisan migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
* php artisan route:list&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
* new item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = new course();&lt;br /&gt;
$course-&amp;gt;number = &amp;quot;2110221&amp;quot;;&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;Computer Engineering Essentials&amp;quot;;&lt;br /&gt;
$course-&amp;gt;year = 2018;&lt;br /&gt;
$course-&amp;gt;semester = 2;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* fetch item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$allcourses = course::all();&lt;br /&gt;
$findcourse = course::find(1);&lt;br /&gt;
$findcourse = course::where(number,&amp;quot;2110221&amp;quot;)-&amp;gt;get();&lt;br /&gt;
&lt;br /&gt;
// -&amp;gt;where(&amp;quot;title&amp;quot;,&amp;quot;like&amp;quot;,&amp;quot;%&amp;quot;.$keyword.&amp;quot;%&amp;quot;)&lt;br /&gt;
// -&amp;gt;orderBy('created_at','desc')&lt;br /&gt;
// -&amp;gt;paginate(10);&lt;br /&gt;
// In view show page numbers: {{$items-&amp;gt;links()}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* edit item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;NEW NAME&amp;quot;;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== User System ====&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=125</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=125"/>
		<updated>2019-03-14T11:44:23Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Eloquent */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&lt;br /&gt;
* {{ config('app.name', 'Laravel') }}&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; ข้างบนสุดเพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;use Illuminate\Support\Facades\Schema;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; function boot เพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;Schema::defaultStringLength(191);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ลอง migrate default script&lt;br /&gt;
*: &amp;lt;pre&amp;gt;php artisan migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
* new item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = new course();&lt;br /&gt;
$course-&amp;gt;number = &amp;quot;2110221&amp;quot;;&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;Computer Engineering Essentials&amp;quot;;&lt;br /&gt;
$course-&amp;gt;year = 2018;&lt;br /&gt;
$course-&amp;gt;semester = 2;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* fetch item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$allcourses = course::all();&lt;br /&gt;
$findcourse = course::find(1);&lt;br /&gt;
$findcourse = course::where(number,&amp;quot;2110221&amp;quot;)-&amp;gt;get();&lt;br /&gt;
&lt;br /&gt;
// -&amp;gt;where(&amp;quot;title&amp;quot;,&amp;quot;like&amp;quot;,&amp;quot;%&amp;quot;.$keyword.&amp;quot;%&amp;quot;)&lt;br /&gt;
// -&amp;gt;orderBy('created_at','desc')&lt;br /&gt;
// -&amp;gt;paginate(10);&lt;br /&gt;
// In view show page numbers: {{$items-&amp;gt;links()}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* edit item&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$course = course::find(1);&lt;br /&gt;
$course-&amp;gt;title = &amp;quot;NEW NAME&amp;quot;;&lt;br /&gt;
$course-&amp;gt;save();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== User System ====&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=124</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=124"/>
		<updated>2019-03-08T04:31:13Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Preparation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&lt;br /&gt;
* {{ config('app.name', 'Laravel') }}&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; ข้างบนสุดเพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;use Illuminate\Support\Facades\Schema;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; function boot เพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;Schema::defaultStringLength(191);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ลอง migrate default script&lt;br /&gt;
*: &amp;lt;pre&amp;gt;php artisan migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== User System ====&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=123</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=123"/>
		<updated>2019-03-08T04:30:18Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Preparation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&lt;br /&gt;
* {{ config('app.name', 'Laravel') }}&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* แก้ไข file &amp;lt;code&amp;gt;app/Providers/AppServiceProvider.php&amp;lt;/code&amp;gt; function boot เพิ่ม&lt;br /&gt;
*: &amp;lt;pre&amp;gt;Schema::defaultStringLength(191);&amp;lt;/pre&amp;gt;&lt;br /&gt;
* ลอง migrate default script&lt;br /&gt;
*: &amp;lt;pre&amp;gt;php artisan migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== User System ====&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=122</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=122"/>
		<updated>2019-03-08T04:22:18Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Preparation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&lt;br /&gt;
* {{ config('app.name', 'Laravel') }}&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ลอง migrate default script&lt;br /&gt;
*: &amp;lt;pre&amp;gt;php artisan migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== User System ====&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=121</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=121"/>
		<updated>2019-03-08T04:19:23Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Preparation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&lt;br /&gt;
* {{ config('app.name', 'Laravel') }}&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=USERNAME&lt;br /&gt;
DB_PASSWORD=PASSWORD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== User System ====&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=120</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=120"/>
		<updated>2019-03-08T04:18:37Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* Database */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&lt;br /&gt;
* {{ config('app.name', 'Laravel') }}&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Preparation ====&lt;br /&gt;
* สร้าง database (สมมติว่าชื่อ laravel_training)&lt;br /&gt;
* แก้ไข &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;pre&amp;gt;&lt;br /&gt;
DB_CONNECTION=mysql&lt;br /&gt;
DB_HOST=127.0.0.1&lt;br /&gt;
DB_PORT=3306&lt;br /&gt;
DB_DATABASE=laravel_training&lt;br /&gt;
DB_USERNAME=root&lt;br /&gt;
DB_PASSWORD=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== User System ====&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=119</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=119"/>
		<updated>2019-03-08T03:33:42Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* View (Blade Template) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&lt;br /&gt;
* {{ config('app.name', 'Laravel') }}&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* @csrf&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== User System ====&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=118</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=118"/>
		<updated>2019-03-08T03:24:47Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* View (Blade Template) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;{{ csrf_token() }}&amp;quot;&amp;gt;&lt;br /&gt;
* {{ config('app.name', 'Laravel') }}&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== User System ====&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=117</id>
		<title>Basic Laravel Training (for CV)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Basic_Laravel_Training_(for_CV)&amp;diff=117"/>
		<updated>2019-03-08T03:24:15Z</updated>

		<summary type="html">&lt;p&gt;Tata: /* View (Blade Template) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reference == &lt;br /&gt;
* Laravel Documentation&lt;br /&gt;
 https://laravel.com/docs/5.8&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* PHP &amp;gt;= 7.1.3&lt;br /&gt;
* OpenSSL PHP Extension&lt;br /&gt;
* PDO PHP Extension&lt;br /&gt;
* Mbstring PHP Extension&lt;br /&gt;
* Tokenizer PHP Extension&lt;br /&gt;
* XML PHP Extension&lt;br /&gt;
* Ctype PHP Extension&lt;br /&gt;
* JSON PHP Extension&lt;br /&gt;
* BCMath PHP Extension&lt;br /&gt;
=== Steps ===&lt;br /&gt;
# Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!&lt;br /&gt;
# Install Composer&lt;br /&gt;
#: https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos&lt;br /&gt;
#: หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ &amp;lt;code&amp;gt;./composer.phar&amp;lt;/code&amp;gt; แทนที่ &amp;lt;code&amp;gt;composer&amp;lt;/code&amp;gt; ถ้าทำการ Install composer เป็น local&lt;br /&gt;
# สร้าง Laravel Project โดยใช้ composer&lt;br /&gt;
#: &amp;lt;pre&amp;gt;composer create-project --prefer-dist laravel/laravel PROJECT_NAME &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run Local Development Server&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve # for running on localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: or&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan serve --port=8888 # for running on localhost:8888&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Basic Tutorial ==&lt;br /&gt;
=== Important directory / file ===&lt;br /&gt;
* &amp;lt;code&amp;gt;app&amp;lt;/code&amp;gt; Where the models are&lt;br /&gt;
** &amp;lt;code&amp;gt;Http&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Controllers&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;Middleware&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; Where the public files (ie. css, js)&lt;br /&gt;
* &amp;lt;code&amp;gt;resources&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;views&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;routes&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;vendor&amp;lt;/code&amp;gt; Where the additional libraries store&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; all environment variables (ie. DB username/password)&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
==== Controller &amp;amp; Route ====&lt;br /&gt;
# Let's make a controller: page_controller&lt;br /&gt;
#: &amp;lt;pre&amp;gt;php artisan make:controller CONTROLLER_NAME&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: จะมีไฟล์ &amp;lt;code&amp;gt;app/Http/Controllers/page_controller.php&amp;lt;/code&amp;gt; ปรากฎ&lt;br /&gt;
# ในไฟล์จะมี code เหล่านี้&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
namespace App\Http\Controllers;&lt;br /&gt;
&lt;br /&gt;
use Illuminate\Http\Request;&lt;br /&gt;
&lt;br /&gt;
class page_controller extends Controller&lt;br /&gt;
{&lt;br /&gt;
    //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองสร้าง method index&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return $menu;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# เพิ่ม Route ใน &amp;lt;code&amp;gt;routes/web.php&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
Route::get('home','page_controller@index');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ลองทดสอบเรียก url&lt;br /&gt;
#: &amp;lt;pre&amp;gt;http://localhost:8000/home&amp;lt;/pre&amp;gt;&lt;br /&gt;
# ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view&lt;br /&gt;
# ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน &amp;lt;code&amp;gt;resources/views&amp;lt;/code&amp;gt; โดยให้สร้าง view ชื่อว่า &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt;&lt;br /&gt;
# ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line&amp;gt;&lt;br /&gt;
    public function index(){&lt;br /&gt;
        $menu = array(&amp;quot;Home&amp;quot;, &amp;quot;My course&amp;quot;, &amp;quot;Setting&amp;quot;);&lt;br /&gt;
        return view(&amp;quot;home&amp;quot;)-&amp;gt;with('menu',$menu);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# ใน &amp;lt;code&amp;gt;home.blade.php&amp;lt;/code&amp;gt; ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
        @foreach($menu as $eachmenu)&lt;br /&gt;
            &amp;lt;li&amp;gt;{{$eachmenu}}&amp;lt;/li&amp;gt;&lt;br /&gt;
        @endforeach&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== View (Blade Template) ====&lt;br /&gt;
* &amp;lt;meta name=&amp;quot;csrf-token&amp;quot; content=&amp;quot;&amp;lt;pre&amp;gt;{{ csrf_token() }}&amp;lt;/pre&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
* &amp;lt;pre&amp;gt;{{ config('app.name', 'Laravel') }}&amp;lt;/pre&amp;gt;&lt;br /&gt;
* @include('inc.messages')&lt;br /&gt;
* @yield('content')&lt;br /&gt;
* @extends('layouts.app')&lt;br /&gt;
* @section('content')&amp;lt;br&amp;gt;@endsection&lt;br /&gt;
* @if&lt;br /&gt;
* @for&lt;br /&gt;
* @foreach&lt;br /&gt;
* {{}}&lt;br /&gt;
* {!!  !!}&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
==== Model &amp;amp; DB ====&lt;br /&gt;
* php artisan make:model MODEL_NAME --migration&lt;br /&gt;
* php artisan make:migration MIGRATION_NAME&lt;br /&gt;
&lt;br /&gt;
==== Eloquent ====&lt;br /&gt;
&lt;br /&gt;
==== Handle CRUD ====&lt;br /&gt;
* php artisan make:controller CONTROLLER_NAME --resource&lt;br /&gt;
* method: get, post, patch, delete&lt;br /&gt;
* Route::resource('ROUTE', 'CONTROLLER');&lt;br /&gt;
&lt;br /&gt;
==== Relationship ====&lt;br /&gt;
===== one to one =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasOne('App\Phone', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\User', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== one to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;hasMany('App\Comment', 'foreign_key', 'local_key');&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsTo('App\Post', 'foreign_key', 'other_key');&lt;br /&gt;
&lt;br /&gt;
===== many to many =====&lt;br /&gt;
* Defining relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
* Defining inverse relationship&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('App\User', 'role_user', 'role_id', 'user_id');&lt;br /&gt;
*: return $this-&amp;gt;belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
==== User System ====&lt;br /&gt;
&lt;br /&gt;
==== Access Control ====&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Linked_List_in_C&amp;diff=116</id>
		<title>Linked List in C</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Linked_List_in_C&amp;diff=116"/>
		<updated>2019-03-07T17:24:58Z</updated>

		<summary type="html">&lt;p&gt;Tata: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Doubly Linked List ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line='line'&amp;gt;&lt;br /&gt;
#include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include&amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
typedef struct node{&lt;br /&gt;
    int val;&lt;br /&gt;
    struct node *prev, *next;&lt;br /&gt;
}node;&lt;br /&gt;
&lt;br /&gt;
node *head = NULL;&lt;br /&gt;
&lt;br /&gt;
node* insert_after(node *n, int val){&lt;br /&gt;
    // insert_after next to current node&lt;br /&gt;
    node *newnode = (node*)malloc(sizeof(node));&lt;br /&gt;
    newnode-&amp;gt;val = val;&lt;br /&gt;
    newnode-&amp;gt;next = NULL;&lt;br /&gt;
    newnode-&amp;gt;prev = NULL;&lt;br /&gt;
    if(n == NULL){&lt;br /&gt;
        n = newnode;&lt;br /&gt;
    }else{&lt;br /&gt;
        newnode-&amp;gt;next = n-&amp;gt;next;&lt;br /&gt;
        newnode-&amp;gt;prev = n;&lt;br /&gt;
&lt;br /&gt;
        if(n-&amp;gt;next != NULL) n-&amp;gt;next-&amp;gt;prev = newnode;&lt;br /&gt;
        n-&amp;gt;next = newnode;&lt;br /&gt;
    }&lt;br /&gt;
    return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
node* insert_before(node *n, int val){&lt;br /&gt;
    if(n == NULL){&lt;br /&gt;
        n = insert_after(n, val);&lt;br /&gt;
    }else{&lt;br /&gt;
        node *prev = n-&amp;gt;prev;&lt;br /&gt;
        if(prev == NULL){&lt;br /&gt;
            // insert at head return new head&lt;br /&gt;
            prev = insert_after(prev, val);&lt;br /&gt;
            prev-&amp;gt;next = n;&lt;br /&gt;
            n-&amp;gt;prev = prev;&lt;br /&gt;
            n = prev;&lt;br /&gt;
        }else{&lt;br /&gt;
            prev = insert_after(prev, val);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
node* remove(node *n){&lt;br /&gt;
    node *removenode = n;&lt;br /&gt;
    node *returnnode = NULL;&lt;br /&gt;
    if(n-&amp;gt;prev != NULL){&lt;br /&gt;
        n-&amp;gt;prev-&amp;gt;next = n-&amp;gt;next;&lt;br /&gt;
        returnnode = n-&amp;gt;prev;&lt;br /&gt;
    }&lt;br /&gt;
    if(n-&amp;gt;next != NULL){&lt;br /&gt;
        n-&amp;gt;next-&amp;gt;prev = n-&amp;gt;prev;&lt;br /&gt;
        returnnode = n-&amp;gt;next;&lt;br /&gt;
    }&lt;br /&gt;
    free(removenode);&lt;br /&gt;
    return returnnode;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void print_list(node *head){&lt;br /&gt;
    printf(&amp;quot;List : &amp;quot;);&lt;br /&gt;
    if(head == NULL){&lt;br /&gt;
        printf(&amp;quot;--EMPTY--&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    while(head != NULL){&lt;br /&gt;
        printf(&amp;quot;%d &amp;quot;, head-&amp;gt;val);&lt;br /&gt;
        head = head-&amp;gt;next;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(){&lt;br /&gt;
    head = insert_after(head, 1);&lt;br /&gt;
    print_list(head);&lt;br /&gt;
    head = insert_after(head, 2);&lt;br /&gt;
    print_list(head);&lt;br /&gt;
    head = insert_after(head, 3);&lt;br /&gt;
    print_list(head);&lt;br /&gt;
    head = insert_before(head, 4);&lt;br /&gt;
    print_list(head);&lt;br /&gt;
    head = insert_before(head, 5);&lt;br /&gt;
    print_list(head);&lt;br /&gt;
&lt;br /&gt;
    node *temp = head-&amp;gt;next-&amp;gt;next;&lt;br /&gt;
    temp = insert_after(temp, 6);&lt;br /&gt;
    print_list(head);&lt;br /&gt;
&lt;br /&gt;
    head = remove(head);&lt;br /&gt;
    print_list(head);&lt;br /&gt;
    head = remove(head);&lt;br /&gt;
    print_list(head);&lt;br /&gt;
    head = remove(head);&lt;br /&gt;
    print_list(head);&lt;br /&gt;
&lt;br /&gt;
    temp = head-&amp;gt;next;&lt;br /&gt;
    temp = remove(temp);&lt;br /&gt;
    print_list(head);&lt;br /&gt;
&lt;br /&gt;
    temp = head-&amp;gt;next;&lt;br /&gt;
    temp = remove(temp);&lt;br /&gt;
    print_list(head);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    head = remove(head);&lt;br /&gt;
    print_list(head);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Old_acioi_wiki_/%E0%B8%84%E0%B8%AD%E0%B8%A1%E0%B8%9E%E0%B8%B4%E0%B8%A7%E0%B9%80%E0%B8%95%E0%B8%AD%E0%B8%A3%E0%B9%8C%E0%B9%82%E0%B8%AD%E0%B8%A5%E0%B8%B4%E0%B8%A1%E0%B8%9B%E0%B8%B4%E0%B8%81_%E0%B9%80%E0%B8%97%E0%B8%AD%E0%B8%A1_2_%E0%B8%9B%E0%B8%B5_2554&amp;diff=114</id>
		<title>Old acioi wiki /คอมพิวเตอร์โอลิมปิก เทอม 2 ปี 2554</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Old_acioi_wiki_/%E0%B8%84%E0%B8%AD%E0%B8%A1%E0%B8%9E%E0%B8%B4%E0%B8%A7%E0%B9%80%E0%B8%95%E0%B8%AD%E0%B8%A3%E0%B9%8C%E0%B9%82%E0%B8%AD%E0%B8%A5%E0%B8%B4%E0%B8%A1%E0%B8%9B%E0%B8%B4%E0%B8%81_%E0%B9%80%E0%B8%97%E0%B8%AD%E0%B8%A1_2_%E0%B8%9B%E0%B8%B5_2554&amp;diff=114"/>
		<updated>2019-03-07T17:23:03Z</updated>

		<summary type="html">&lt;p&gt;Tata: Tata moved page คอมพิวเตอร์โอลิมปิก เทอม 2 ปี 2554 to Old acioi wiki /คอมพิวเตอร์โอลิมปิก เทอม 2 ปี 2554&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ประกาศ ==&lt;br /&gt;
* 1. วันที่ 6 ธ.ค. 54 เปิดเรียน ไปเจอกันห้องคอม หลังเรียนคาบสุดท้าย ไม่เกิน 15 นาทีนะ&lt;br /&gt;
&lt;br /&gt;
== ตารางเรียน (กลุ่มติวเข้าสอวน. ค่าย 2) ==&lt;br /&gt;
* Update 10/12/2554&lt;br /&gt;
* ชื่อโจทย์ที่เป็น Programming Test พี่ไม่ได้เอาลงในนี้ให้นะ&lt;br /&gt;
* ทุกวันให้ฝึกเขียน Algorithm ที่เรียนแต่ละวัน วันไหนที่มีโจทย์เพิ่มเติม ให้ทำด้วยเป็นแบบฝึกหัดเพิ่มเติม&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Summer ===&lt;br /&gt;
*'''จ.21 พ.ย. 54'''&lt;br /&gt;
** Introduction + ทดลองใช้ Grader (พี่ต้า)&lt;br /&gt;
** Programming Pre-Test 3 ข้อ 2 ชั่วโมง (พี่ต้า) -&amp;gt; เนื้อหา สอวน. ค่าย 1&lt;br /&gt;
*** เครื่องคิดเลข1 (calc1)&lt;br /&gt;
*** เลขยกกำลัง (power)&lt;br /&gt;
*** คูณเมตริกซ์1 (matrix1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== สัปดาห์ที่ 1 ===&lt;br /&gt;
*'''อ.6 ธ.ค. 54'''&lt;br /&gt;
** แนะนำการติวค่าย 2 (พี่ต้า)&lt;br /&gt;
** Advanced C Programming (พี่ต้า)&lt;br /&gt;
*** Longest Palindrome (longpal)&lt;br /&gt;
*** กลับสตริง (strrev)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*'''พ.7 ธ.ค. 54'''&lt;br /&gt;
** Linked Lists (พี่ท็อป)&lt;br /&gt;
*** Editor (editor)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*'''พฤ.8 ธ.ค. 54'''&lt;br /&gt;
** Representation of Graph (พี่ต้า)&lt;br /&gt;
*** [TOI5] วงล้อแปลงตัวเลข (Number Substitution Wheels) (nsw) &lt;br /&gt;
*** [TOI5] จุดคุ้มทุน (Return On Investment) (roi) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== สัปดาห์ที่ 2 ===&lt;br /&gt;
*'''อ.13 ธ.ค. 54'''&lt;br /&gt;
** Review Linked Lists (พี่ต้า)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*'''พ.14 ธ.ค. 54'''&lt;br /&gt;
** Stacks (เฟิร์ส)&lt;br /&gt;
*** วงเล็บ (paren)&lt;br /&gt;
*** [A3C#10] สวนสนุกสุดหรรษาหลั่นล๊าฮาเฮ (themepark) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''พฤ.15 ธ.ค. 54'''&lt;br /&gt;
** Queue (พี่ท็อป)&lt;br /&gt;
*** Sort1 (sort1)&lt;br /&gt;
&lt;br /&gt;
=== สัปดาห์ที่ 3 ===&lt;br /&gt;
*'''จ.19 ธ.ค. 54'''&lt;br /&gt;
** Recursion + Transform and Conquer (เวศ)&lt;br /&gt;
*** Tower of Hanoi (hanoi) &lt;br /&gt;
*** เมล็ดพันธุ์ต้นแดงดำ (redblackseed) &lt;br /&gt;
*** กำเนิดกระแสไฟฟ้า (electric) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''อ.20 ธ.ค. 54'''&lt;br /&gt;
** Algorithm Analysis (เฟิร์ส)&lt;br /&gt;
*** [A3C#9] Star Problem (star) &lt;br /&gt;
*** [A3C#9] Snow Flake (snow) &lt;br /&gt;
*** [A3C#9] Frog chocolate (frog) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''พ.21 ธ.ค. 54'''&lt;br /&gt;
** Programming Test 1 (พี่ต้า)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''พฤ.22 ธ.ค. 54'''&lt;br /&gt;
** ทดสอบข้อเขียน 1 (พี่ท็อป)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== สัปดาห์ที่ 4 ===&lt;br /&gt;
*'''จ.26 ธ.ค. 54'''&lt;br /&gt;
** Backtracking (เวศ)&lt;br /&gt;
*** [A3C#9] Maze (maze) &lt;br /&gt;
*** [A3C#9] Wonderful Animal (animal) &lt;br /&gt;
*** หาคู่ (pals) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''อ.27 ธ.ค. 54'''&lt;br /&gt;
** Brute Force (เฟิร์ส)&lt;br /&gt;
*** แพ็คกล่อง (packrec) &lt;br /&gt;
*** [A3C#10] หรือว่ามันจะง่าย Or it’s easy (easy) &lt;br /&gt;
*** [A3C#10] Welcome to A3C#10 (welcome) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''พ.28 ธ.ค. 54'''&lt;br /&gt;
** Trees (พี่ท็อป)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''พฤ.29 ธ.ค. 54'''&lt;br /&gt;
** Heaps (เวศ)&lt;br /&gt;
** Binary Search Tree (เฟิร์ส)&lt;br /&gt;
*** บ่อน้ำ (pond) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== สัปดาห์ที่ 5 ===&lt;br /&gt;
*'''พ.4 ม.ค. 55'''&lt;br /&gt;
** Programming Test 2 (พี่ต้า)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''พฤ.5 ม.ค. 55'''&lt;br /&gt;
** Divide and Conquer (1) - concept, quicksort (พี่ท็อป)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''ศ.6 ม.ค. 55'''&lt;br /&gt;
** Divide and Conquer (2) - mergesort, binary search (พี่ท็อป)&lt;br /&gt;
*** UnlockME! (unlock) &lt;br /&gt;
*** Inversion (inversion) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== สัปดาห์ที่ 6 ===&lt;br /&gt;
*'''จ.9 ม.ค. 55'''&lt;br /&gt;
** Decrease and Conquer (1) - Insertion sort, Selection Problem, Depth First Search (พี่ต้า)&lt;br /&gt;
*** Bipartite Graph (bipartite) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''อ.10 ม.ค. 55'''&lt;br /&gt;
** Decrease and Conquer (2) - Breadth First Search, Topological Sort (พี่ต้า)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''พ.11 ม.ค. 55'''&lt;br /&gt;
** Programming Test 3 (พี่ต้า)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''พฤ.12 ม.ค. 55'''&lt;br /&gt;
** Programming Test 4 (พี่ต้า)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== สัปดาห์ที่ 7 ===&lt;br /&gt;
*'''อ.17 ม.ค. 55'''&lt;br /&gt;
** Greedy Algorithm (1) - concept, coin change, cont. knapsack, Disjoint set (พี่ท็อป)&lt;br /&gt;
*** lift1 (lift1) &lt;br /&gt;
*** lift2 (lift2) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''พ.18 ม.ค. 55'''&lt;br /&gt;
** Greedy Algorithm (2) - Kruskal, Prim, Dijkstra (พี่ต้า)&lt;br /&gt;
*** เบซซี่กลับมากินข้าวเย็น (comehome) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''พฤ.19 ม.ค. 55'''&lt;br /&gt;
** Flood Fill Algorithm (เวศ)&lt;br /&gt;
*** [ACOPC#1] ปีศาจผู้กินฝัน (dreameater)&lt;br /&gt;
&lt;br /&gt;
=== สัปดาห์ที่ 8 ===&lt;br /&gt;
*'''อ.24 ม.ค. 55'''&lt;br /&gt;
** Dynamic Programming (1) - concept, Knapsack (พี่ต้า)&lt;br /&gt;
*** [A3C#9] Hedwig Problem (hedwig) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''พ.25 ม.ค. 55'''&lt;br /&gt;
** Dynamic Programming (2) - Minchange, Quicksum (พี่ท็อป)&lt;br /&gt;
*** 1+1 (oneplusone) &lt;br /&gt;
*** [A3C#9] Bomb Problem (bomb) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''พฤ.26 ม.ค. 55'''&lt;br /&gt;
** Programming Test 5 (พี่ต้า)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''ศ.27 ม.ค. 55'''&lt;br /&gt;
** Programming Test 6 (พี่ต้า)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== สัปดาห์ที่ 9 ===&lt;br /&gt;
*'''จ.30 ม.ค. 55'''&lt;br /&gt;
** Game Tree (พี่เคริก)&lt;br /&gt;
*** เกมหยิบเหรียญ (nimgame) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''อ.31 ม.ค. 55'''&lt;br /&gt;
** Hashing (เฟิร์ส)&lt;br /&gt;
*** [A3C#9] potion (potion) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''พ.1 ก.พ. 55'''&lt;br /&gt;
** String Matching (เฟิร์ส)&lt;br /&gt;
*** [ACOPC#1] ปีศาจผู้กินฝัน2 (dreameater2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''พฤ.2 ก.พ. 55'''&lt;br /&gt;
** qSort + Floyd Warshall (เวศ)&lt;br /&gt;
*** [A3C#9] Marauder’s Map (map) &lt;br /&gt;
*** ความน่าจะไป (trip) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== สัปดาห์ที่ 10 ===&lt;br /&gt;
*'''จ.6 ก.พ. 55'''&lt;br /&gt;
** Review Advanced C Programming + Linked Lists + Stack + Queue (เวศ/เฟิร์ส)&lt;br /&gt;
*** [A3C#9] Lamp Problem (lamp) &lt;br /&gt;
*** [A3C#9] Molecular weight (mw) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''อ.7 ก.พ. 55'''&lt;br /&gt;
** Review Sorts + Search + Backtracking (เวศ/เฟิร์ส)&lt;br /&gt;
*** [A3C#9] LuckyD Problem (luck) &lt;br /&gt;
*** [A3C#9] milk Problem (milk) &lt;br /&gt;
*** [A3C#10] คนดูแล (staff) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''พ.8 ก.พ. 55'''&lt;br /&gt;
** Review Graph Algorithm (เวศ/เฟิร์ส)&lt;br /&gt;
*** [A3C#10] หมู่บ้านสุขสันต์ลัดดาแลนด์ (laddaland) &lt;br /&gt;
*** [A3C#10] สสวท. (ipst) &lt;br /&gt;
*** [A3C#10] ออกแบบรัก (design) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== สัปดาห์ที่ 11 ===&lt;br /&gt;
*'''จ.13 ก.พ. 55'''&lt;br /&gt;
** Review Dynamic Programming (เวศ/เฟิร์ส)&lt;br /&gt;
*** [A3C#10] ปลาไหลสีน้ำเงิน (blueeels) &lt;br /&gt;
*** [A3C#10] สปินสุดพลังเหลือประมาณ (spin) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''อ.14 ก.พ. 55'''&lt;br /&gt;
** Review File Pointer (เวศ/เฟิร์ส)&lt;br /&gt;
*** [TOI6] ปะวะหล่ำ (gem) &lt;br /&gt;
*** [A3C#10] โพลิดอน (polidon) &lt;br /&gt;
*** [A3C#9] Sorting Hat (hat) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''พ.15 ก.พ. 55'''&lt;br /&gt;
** Programming Test 7 (พี่ต้า)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''พฤ.16 ก.พ. 55'''&lt;br /&gt;
** Programming Test 8 (พี่ต้า)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== สัปดาห์ที่ 12 ===&lt;br /&gt;
*'''จ.20 ก.พ. 55'''&lt;br /&gt;
** Fenwick Tree (พี่ท็อป)&lt;br /&gt;
*** [A3C#10] Inundated Dimensional Yard (indy) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''อ.21 ก.พ. 55'''&lt;br /&gt;
** Maximum Flow (พี่ท็อป)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''พ.22 ก.พ. 55'''&lt;br /&gt;
** Programming Test 9 (พี่ต้า)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''พฤ.23 ก.พ. 55'''&lt;br /&gt;
** Programming Test 10 (พี่ต้า)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== สัปดาห์ที่ 13 ===&lt;br /&gt;
*'''จ.27 ก.พ. 55'''&lt;br /&gt;
** Programming Test 11 (พี่ต้า)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''อ.28 ก.พ. 55'''&lt;br /&gt;
** Programming Test 12 (พี่ต้า)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''พ.29 ก.พ. 55'''&lt;br /&gt;
** Programming Test 13 (พี่ต้า)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== สัปดาห์ที่ 14 ===&lt;br /&gt;
* อ่านหนังสือเตรียมสอบ Final&lt;br /&gt;
&lt;br /&gt;
== เนื้อหาการเรียนค่าย สอวน. ค่าย 2 ==&lt;br /&gt;
อ้างอิงจาก สอวน. ปี 2554&lt;br /&gt;
&lt;br /&gt;
'''Data Structure'''&lt;br /&gt;
*1.	Advanced C Programming (Memory Organization, Pointers, Dynamic Memory Allocation, Structure, String Functions)&lt;br /&gt;
*2.	Linked Lists (Single Linked Lists, Double Linked Lists, Circular Linked Lists)&lt;br /&gt;
*3.	Stacks and Queue (Stacks, Queue, Infix/Postfix/Prefix Expression)&lt;br /&gt;
*4.	Recursion (Recursive Algorithm, Execution Stack)&lt;br /&gt;
*5.	Trees (Definitions, Traversal, Binary Trees)&lt;br /&gt;
*6.	Heaps (Heaps, Priority Queue)&lt;br /&gt;
*7.	Binary Search Trees&lt;br /&gt;
*8.	B-Tree&lt;br /&gt;
*9.	Hashing (Hash Function, Collision, Open Addressing, Separate Chaining)&lt;br /&gt;
*10.	Huffman Encoding&lt;br /&gt;
*11.	Game Tree&lt;br /&gt;
'''Algorithm'''&lt;br /&gt;
*1.	Algorithm Analysis (Asymptotic Notation, Non-recursive Function, Recursive Function, Master Theorem)&lt;br /&gt;
*2.	Brute Force (Selection Sort, Bubble Sort, String Matching, Exhaustive Search, Travelling Salesman,  0/1 Knapsack Problem, Assignment Problem)&lt;br /&gt;
*3.	Divide and Conquer (Merge Sort, Quick Sort, Binary Search) &lt;br /&gt;
*4.	Representation of Graphs (Definition, Adjacency List, Adjacency Matrix)&lt;br /&gt;
*5.	Decrease and Conquer (Insertion Sort, Selection Problem, Depth First Search, Breadth First Search, Topological Sort)&lt;br /&gt;
*6.	Backtracking (Maze Problem, Hamiltonian Problem, N-Queen Problem)&lt;br /&gt;
*7.	Transform and Conquer (Presorting)&lt;br /&gt;
*8.	String Matching (Horspool’s Algorithm, Boyer-Moore’s Algorithm)&lt;br /&gt;
*9.	Greedy Algorithm (Making Change Problem, Continuous Knapsack Problem, Kruskal’s Algorithm, Prim’s Algorithm, Dijkstra’s Algorithm)&lt;br /&gt;
*10.	Dynamic Programming (Min-Change Problem, 0/1 Knapsack Problem)&lt;br /&gt;
*11.	Other Problems (Maximum Flow Problem, Assignment Problem)&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=%E0%B8%84%E0%B8%AD%E0%B8%A1%E0%B8%9E%E0%B8%B4%E0%B8%A7%E0%B9%80%E0%B8%95%E0%B8%AD%E0%B8%A3%E0%B9%8C%E0%B9%82%E0%B8%AD%E0%B8%A5%E0%B8%B4%E0%B8%A1%E0%B8%9B%E0%B8%B4%E0%B8%81_%E0%B9%80%E0%B8%97%E0%B8%AD%E0%B8%A1_2_%E0%B8%9B%E0%B8%B5_2554&amp;diff=115</id>
		<title>คอมพิวเตอร์โอลิมปิก เทอม 2 ปี 2554</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=%E0%B8%84%E0%B8%AD%E0%B8%A1%E0%B8%9E%E0%B8%B4%E0%B8%A7%E0%B9%80%E0%B8%95%E0%B8%AD%E0%B8%A3%E0%B9%8C%E0%B9%82%E0%B8%AD%E0%B8%A5%E0%B8%B4%E0%B8%A1%E0%B8%9B%E0%B8%B4%E0%B8%81_%E0%B9%80%E0%B8%97%E0%B8%AD%E0%B8%A1_2_%E0%B8%9B%E0%B8%B5_2554&amp;diff=115"/>
		<updated>2019-03-07T17:23:03Z</updated>

		<summary type="html">&lt;p&gt;Tata: Tata moved page คอมพิวเตอร์โอลิมปิก เทอม 2 ปี 2554 to Old acioi wiki /คอมพิวเตอร์โอลิมปิก เทอม 2 ปี 2554&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Old acioi wiki /คอมพิวเตอร์โอลิมปิก เทอม 2 ปี 2554]]&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Main_Page&amp;diff=113</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Main_Page&amp;diff=113"/>
		<updated>2019-03-07T17:22:17Z</updated>

		<summary type="html">&lt;p&gt;Tata: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teaching ==&lt;br /&gt;
=== ACIOI ===&lt;br /&gt;
&lt;br /&gt;
== Knowledge Base ==&lt;br /&gt;
=== Data Structure ===&lt;br /&gt;
* [[Linked List in C]]&lt;br /&gt;
&lt;br /&gt;
=== Algorithm ===&lt;br /&gt;
&lt;br /&gt;
=== ยกมาจาก wiki.acioi.in.th ===&lt;br /&gt;
* [[Old acioi wiki]]&lt;br /&gt;
&lt;br /&gt;
== Training ==&lt;br /&gt;
=== CourseVille ===&lt;br /&gt;
* [[Basic Laravel Training (for CV)]]&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=21110327_algorithm_design&amp;diff=112</id>
		<title>21110327 algorithm design</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=21110327_algorithm_design&amp;diff=112"/>
		<updated>2019-03-07T17:20:51Z</updated>

		<summary type="html">&lt;p&gt;Tata: Created page with &amp;quot;Algorithm Page Created By Tata201201   Source Code Based on C++  == Algorithm Analysis ==   == Divide and Conquer == === Interesting Problems === * [http://www.programming.in....&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Algorithm Page Created By Tata201201 &lt;br /&gt;
&lt;br /&gt;
Source Code Based on C++&lt;br /&gt;
&lt;br /&gt;
== Algorithm Analysis ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Divide and Conquer ==&lt;br /&gt;
=== Interesting Problems ===&lt;br /&gt;
* [http://www.programming.in.th/task/rev2_problem.php?pid=1109 คู่ตัวเลขเด่น (pair)]&lt;br /&gt;
=== Merge Sort ===&lt;br /&gt;
* ตั้งแต่สมัยเข้าค่าย สอวน. ค่าย 2&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include&amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
int n,seq[100000],tm[100000];&lt;br /&gt;
void merge(int lb,int ub){&lt;br /&gt;
    if(lb&amp;gt;=ub) return;&lt;br /&gt;
    int mid=(ub+lb)/2,i,j;&lt;br /&gt;
    merge(lb,mid);&lt;br /&gt;
    merge(mid+1,ub);&lt;br /&gt;
    int runa=lb,runb=lb,runc=mid+1;&lt;br /&gt;
    while(runb&amp;lt;=mid&amp;amp;&amp;amp;runc&amp;lt;=ub){&lt;br /&gt;
        if(seq[runb]&amp;lt;=seq[runc]){&lt;br /&gt;
            tm[runa]=seq[runb];&lt;br /&gt;
            runb++;&lt;br /&gt;
        }else{&lt;br /&gt;
            tm[runa]=seq[runc];&lt;br /&gt;
            runc++;&lt;br /&gt;
        }&lt;br /&gt;
        runa++;&lt;br /&gt;
    }&lt;br /&gt;
    while(runb&amp;lt;=mid){&lt;br /&gt;
        tm[runa]=seq[runb];&lt;br /&gt;
        runa++;&lt;br /&gt;
        runb++;&lt;br /&gt;
    }&lt;br /&gt;
    while(runc&amp;lt;=ub){&lt;br /&gt;
        tm[runa]=seq[runc];&lt;br /&gt;
        runa++;&lt;br /&gt;
        runc++;&lt;br /&gt;
    }&lt;br /&gt;
    for(i=lb;i&amp;lt;=ub;i++){&lt;br /&gt;
        seq[i]=tm[i];&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
int main(){&lt;br /&gt;
    printf(&amp;quot;Enter numbers of input : &amp;quot;);&lt;br /&gt;
    scanf(&amp;quot;%d&amp;quot;,&amp;amp;n);&lt;br /&gt;
    int i;&lt;br /&gt;
    printf(&amp;quot;Enter %d numbers : &amp;quot;,n);&lt;br /&gt;
    for(i=0;i&amp;lt;n;i++){&lt;br /&gt;
        scanf(&amp;quot;%d&amp;quot;,&amp;amp;seq[i]);&lt;br /&gt;
    }&lt;br /&gt;
    merge(0,n-1);&lt;br /&gt;
    printf(&amp;quot;\nSorted sequence is : &amp;quot;);&lt;br /&gt;
    for(i=0;i&amp;lt;n;i++){&lt;br /&gt;
        printf(&amp;quot;%d &amp;quot;,seq[i]);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    scanf(&amp;quot; &amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Quick Sort ===&lt;br /&gt;
* ตั้งแต่สมัยเข้าค่าย สอวน. ค่าย 2&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
int n,seq[100000];&lt;br /&gt;
void swap(int x,int y){&lt;br /&gt;
    int temp=seq[x];&lt;br /&gt;
    seq[x]=seq[y];&lt;br /&gt;
    seq[y]=temp;&lt;br /&gt;
}&lt;br /&gt;
void quick(int lb,int ub){&lt;br /&gt;
    if(lb&amp;gt;=ub) return;&lt;br /&gt;
    int piv=seq[lb],back=lb,i;&lt;br /&gt;
    for(i=lb+1;i&amp;lt;=ub;i++){&lt;br /&gt;
        if(seq[i]&amp;lt;piv){&lt;br /&gt;
            back++;&lt;br /&gt;
            swap(back,i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    swap(back,lb);&lt;br /&gt;
    quick(lb,back-1);&lt;br /&gt;
    quick(back+1,ub);&lt;br /&gt;
}&lt;br /&gt;
int main(){&lt;br /&gt;
    printf(&amp;quot;Enter numbers of input : &amp;quot;);&lt;br /&gt;
    scanf(&amp;quot;%d&amp;quot;,&amp;amp;n);&lt;br /&gt;
    int i;&lt;br /&gt;
    printf(&amp;quot;Enter %d numbers : &amp;quot;,n);&lt;br /&gt;
    for(i=0;i&amp;lt;n;i++){&lt;br /&gt;
        scanf(&amp;quot;%d&amp;quot;,&amp;amp;seq[i]);&lt;br /&gt;
    }&lt;br /&gt;
    quick(0,n-1);&lt;br /&gt;
    printf(&amp;quot;\nSorted sequence is : &amp;quot;);&lt;br /&gt;
    for(i=0;i&amp;lt;n;i++){&lt;br /&gt;
        printf(&amp;quot;%d &amp;quot;,seq[i]);&lt;br /&gt;
    }&lt;br /&gt;
    scanf(&amp;quot; &amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dynamic Programming ==&lt;br /&gt;
&lt;br /&gt;
== Greedy Algorithm ==&lt;br /&gt;
&lt;br /&gt;
== Graph Algorithm ==&lt;br /&gt;
&lt;br /&gt;
== Shortest Path ==&lt;br /&gt;
&lt;br /&gt;
== State Space Search ==&lt;br /&gt;
&lt;br /&gt;
== P NP ==&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=2110211_data_struct&amp;diff=111</id>
		<title>2110211 data struct</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=2110211_data_struct&amp;diff=111"/>
		<updated>2019-03-07T17:20:20Z</updated>

		<summary type="html">&lt;p&gt;Tata: Created page with &amp;quot;ยินดีต้อนรับสู่ wiki เพื่อติว 2110211 Data Structure (By C++) &amp;lt;br&amp;gt; * '''โจทย์ challenge ทำไม่ได้อย...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ยินดีต้อนรับสู่ wiki เพื่อติว 2110211 Data Structure (By C++) &amp;lt;br&amp;gt;&lt;br /&gt;
* '''โจทย์ challenge ทำไม่ได้อย่าไปเครียด'''&lt;br /&gt;
* '''สำหรับเทพ หรือคนที่ต้องการความท้าทายอย่างสุดๆ''' แนะนำโจทย์ challenge ด้านล่างสุด &lt;br /&gt;
ปล. ขอบคุณพื้นที่ ของ ชมรมคอมพิวเตอร์โอลิมปิก โรงเรียนอัสสัมชัญ&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''โดย TATA201201 Gr.J 96 CP 39'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Syllabus Schedule =&lt;br /&gt;
* วันที่	หัวเรื่อง&lt;br /&gt;
* 28 และ 30 พ.ย.	Introduction to C++, Intro to STL&lt;br /&gt;
* 4 และ 6 พ.ย.	Pointer, &amp;lt;vector&amp;gt;, &amp;lt;pair&amp;gt;, basic &amp;lt;map&amp;gt;, Using iterator, sort(), find(),&lt;br /&gt;
* 11 และ 13 พ.ย.	Composition of data structure, e.g., vector of map. &lt;br /&gt;
* 18 และ 20 พ.ย.	&amp;lt;deque&amp;gt;, &amp;lt;set&amp;gt;, x 3 / 2 problem &lt;br /&gt;
* 25 และ 27 พ.ย.	&amp;lt;map&amp;gt; with custom sort, overloading of &amp;lt;, custom sort&lt;br /&gt;
* 26 และ 28 พ.ย.	Class in C++&lt;br /&gt;
* 2 และ 4 ธ.ค.	Implementing CP::vector&lt;br /&gt;
* 9 และ 11 ธ.ค.	Stack, Queue, Implementing CP::deque&lt;br /&gt;
* 16 และ 18 ธ.ค.	Priority Queue, Binary Heap, Implementing CP::priority_queue&lt;br /&gt;
* 24 ธ.ค.	Mid-term Exam&lt;br /&gt;
* 30 ธ.ค. และ 1 ม.ค.	หยุดวันปีใหม่&lt;br /&gt;
* 6 และ 8 ม.ค.	Hash&lt;br /&gt;
* 13 และ 15 ม.ค.	Implementing CP::unordered_sort&lt;br /&gt;
* 20 และ 22 ม.ค.	หยุดกีฬามหาวิทยาลัย&lt;br /&gt;
* 27 และ 29 ม.ค.	Linked List, Doubly Linked List&lt;br /&gt;
* 3 และ 5 ก.พ.	Implementing CP::list, Binary Tree&lt;br /&gt;
* 10 และ 12 ก.พ.	Binary Tree, Binary Search Tree &lt;br /&gt;
* 17 และ 19 ก.พ.	AVL Tree, implementing CP::map&lt;br /&gt;
* 25 ก.พ.	Final Exam&lt;br /&gt;
&lt;br /&gt;
= Midterm =&lt;br /&gt;
* โปรดอ่าน&lt;br /&gt;
** หัดอ่าน reference ที่อาจารย์แจก มันมีประโยชน์&lt;br /&gt;
** ใช้เป็นอันเดียว อันอื่นก็น่าจะเป็นได้ไม่ยาก มันเหมือนกันหมดแหละ&lt;br /&gt;
&lt;br /&gt;
== STL Containers ==&lt;br /&gt;
&lt;br /&gt;
=== vector ===&lt;br /&gt;
* Extendable array&lt;br /&gt;
* constructor&lt;br /&gt;
** vector&amp;lt;T&amp;gt; v;&lt;br /&gt;
** vector&amp;lt;T&amp;gt; v(size_t size); // สร้างให้เริ่มต้นมี size ช่อง&lt;br /&gt;
** vector&amp;lt;T&amp;gt; v(iterator begin, iterator end); // สร้างโดยแทรกข้อมูลจาก begin -&amp;gt; end&lt;br /&gt;
* Function ที่สำคัญ&lt;br /&gt;
** v.size(); // ขนาดที่ array สามารถจุได้&lt;br /&gt;
** v.push_back(T value); // ต่อท้าย array &amp;gt;&amp;gt; constant time&lt;br /&gt;
** v.pop_back(); // ลบตัวทุดท้ายออก &amp;gt;&amp;gt; constant time&lt;br /&gt;
** v.insert(iterator, T value); // แทรกลงตำแหน่งใดๆตาม iterator &amp;gt;&amp;gt; ใช้เวลาแปรตามตำแหน่ง&lt;br /&gt;
*** v.insert(iterator place, iterator begin, iterator end); // แทรกลงตำแหน่ง place โดยเอาข้อมูลจาก begin -&amp;gt; end มาแทรก&lt;br /&gt;
** v.erase(iterator) // ลบข้อมูล&lt;br /&gt;
*** v.erase(iterator first, iterator last); // ลบข้อมูลเป็นช่วง&lt;br /&gt;
* Iterator&lt;br /&gt;
** vector&amp;lt;T&amp;gt;::iterator it;&lt;br /&gt;
** v.begin();&lt;br /&gt;
** v.end();&lt;br /&gt;
** access ที่ตำแหน่งใดๆ v.begin()+5; มีค่าเหมือน v[5];&lt;br /&gt;
* ตัวอย่างการใช้งาน&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vector&amp;lt;int&amp;gt; v;&lt;br /&gt;
for(int i=0;i&amp;lt;10;i++) v.push_back(i);&lt;br /&gt;
v.insert(v.begin(),999);&lt;br /&gt;
v.pop_back();&lt;br /&gt;
for(size_t i=0;i&amp;lt;v.size();i++) cout &amp;lt;&amp;lt; v[i] &amp;lt;&amp;lt; &amp;quot; &amp;quot; ;&lt;br /&gt;
cout &amp;lt;&amp;lt; endl;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== pair ===&lt;br /&gt;
* เก็บข้อมูลเป็นคู่อันดับ&lt;br /&gt;
* Constructor&lt;br /&gt;
** pair&amp;lt;T1, T2&amp;gt; p(T1 val, T2 val);&lt;br /&gt;
** make_pair(val1, val2);&lt;br /&gt;
* Access&lt;br /&gt;
** pair&amp;lt;int,int&amp;gt; v1(15,20);&lt;br /&gt;
** cout &amp;lt;&amp;lt; v1.first() &amp;lt;&amp;lt; &amp;quot; &amp;quot; &amp;lt;&amp;lt; v1.second(); // ได้ข้อมูลตัวแรก 15 และข้อมูลตัวหลัง 20 ตามลำดับ&lt;br /&gt;
&lt;br /&gt;
=== set ===&lt;br /&gt;
* Constructor&lt;br /&gt;
** set&amp;lt;T&amp;gt; s;&lt;br /&gt;
** set&amp;lt;T&amp;gt; s(iterator begin, iterator end); // กำหนดค่าเริ่มต้นให้ set&lt;br /&gt;
* Function ที่ควรรู้&lt;br /&gt;
** s.insert(T x); // แทรก คืนค่าเป็น pait&amp;lt;iterator,bool&amp;gt; บอกว่า แทรกตำแหน่งไหน และได้แทรกรึป่าว (เผื่อมีซ้ำ)&lt;br /&gt;
** s.erase(T x); // ลบ&lt;br /&gt;
*** s.erase(iterator) // ลบตัวนั้น&lt;br /&gt;
*** s.erase(iterator begin, iterator end); // ลบเป็นช่วง&lt;br /&gt;
** s.find(T x); // ค้นหา&lt;br /&gt;
** s.size(); // หาขนาดของ set&lt;br /&gt;
* Iterator&lt;br /&gt;
** set&amp;lt;T&amp;gt;::iterator it;&lt;br /&gt;
** s.begin(); s.end(); // เริ่มต้น สิ้นสุด&lt;br /&gt;
** ++it; ได้ it+5; ไม่ได้&lt;br /&gt;
* ตัวอย่างการใช้งาน&lt;br /&gt;
** เก็บข้อมูลที่ไม่ต้องการตัวซ้ำ&lt;br /&gt;
** หาคำที่แตกต่างกัน&lt;br /&gt;
&lt;br /&gt;
=== map ===&lt;br /&gt;
* Constructor&lt;br /&gt;
** map&amp;lt;KeyType, MappedType&amp;gt; m;&lt;br /&gt;
* Function ที่ควรรู้&lt;br /&gt;
** m.insert(make_pair(KeyType Kval, MappedType Mval)); // แทรก&lt;br /&gt;
*** แทรกอีกแบบ m[KeyType Kval] = MappedType Mval; // มองเป็นอาเร&lt;br /&gt;
** m.erase(iterator);&lt;br /&gt;
*** m.erase(iterator begin, iterator end); &lt;br /&gt;
* Iterator&lt;br /&gt;
** map&amp;lt;T,T&amp;gt;::iterator it;&lt;br /&gt;
** m.begin(); m.end(); // ข้อมูลเรียงลำดับ&lt;br /&gt;
** it คืนค่าได้ pointer to pair เรียกใช้งานได้แบบ it-&amp;gt;first; it-&amp;gt;second;&lt;br /&gt;
* ตัวอย่างการใช้งาน&lt;br /&gt;
** การนับคำซ้ำ&lt;br /&gt;
* SMS [[http://www.programming.in.th/task/rev2_problem.php?pid=1027 LINK]]&lt;br /&gt;
&lt;br /&gt;
=== stack ===&lt;br /&gt;
* Last In First Out เข้าหลังออกก่อน&lt;br /&gt;
* Constructor&lt;br /&gt;
** stack&amp;lt;T&amp;gt; s;&lt;br /&gt;
* Function ที่ควรรู้&lt;br /&gt;
** s.push(T value); // ใส่ลง stack&lt;br /&gt;
** s.pop(); // เอาข้อมูลออกจาก stack โดยไม่อ่าน&lt;br /&gt;
** s.top(); // อ่านข้อมูลบนสุดของ stack&lt;br /&gt;
** s.size(); // จำนวนข้อมูลใน stack&lt;br /&gt;
* ประโยชน์&lt;br /&gt;
** เช็ควงเล็บ&lt;br /&gt;
** แปลงนิพจน์ Infix &amp;gt; Postfix&lt;br /&gt;
** คำนวณนิพจน์แบบ Postfix&lt;br /&gt;
** การค้นหาตามแนวลึก Breadth First Search&lt;br /&gt;
* Three paren [[http://www.programming.in.th/task/rev2_problem.php?pid=1121 LINK]]&lt;br /&gt;
&lt;br /&gt;
=== Queue ===&lt;br /&gt;
* First In First Out เข้าก่อนออกก่อน&lt;br /&gt;
* Constructor&lt;br /&gt;
** queue&amp;lt;T&amp;gt; q;&lt;br /&gt;
* Function ที่ควรรู้&lt;br /&gt;
** q.push(T value); // ใส่ลง queue&lt;br /&gt;
** q.pop(); // เอาข้อมูลออกจาก queue โดยไม่อ่าน&lt;br /&gt;
** q.front(); // อ่านข้อมูลต้น queue&lt;br /&gt;
** q.back(); // อ่านข้อมูลท้าย queue&lt;br /&gt;
** q.size(); // จำนวนข้อมูลใน queue&lt;br /&gt;
* ประโยชน์&lt;br /&gt;
** จัดลำดับการทำงาน&lt;br /&gt;
** การค้นหาตามแนวกว้าง Breadth First Search&lt;br /&gt;
** Radix Sort&lt;br /&gt;
* Nugget Number (คล้าย *3/2 มั้ง) [[http://www.programming.in.th/task/rev2_problem.php?pid=1003 LINK]]&lt;br /&gt;
* Plate [[http://www.programming.in.th/task/rev2_problem.php?pid=1004 LINK]]&lt;br /&gt;
&lt;br /&gt;
=== Deque ===&lt;br /&gt;
* Double Ended Queue คล้าย Vector + Stack + Queue&lt;br /&gt;
&lt;br /&gt;
=== Priority Queue ===&lt;br /&gt;
* Default &amp;gt; Max ออกมาก่อนเสมอ&lt;br /&gt;
* Constructor&lt;br /&gt;
** priority_queue&amp;lt;T&amp;gt; pq;&lt;br /&gt;
* Function ที่ควรรู้&lt;br /&gt;
** pq.push(T value); // ใส่ลง queue&lt;br /&gt;
** pq.pop(); // เอาข้อมูลออกจาก queue โดยไม่อ่าน&lt;br /&gt;
** pq.top(); // อ่านข้อมูลต้น queue&lt;br /&gt;
** pq.size(); // จำนวนข้อมูลใน queue&lt;br /&gt;
* ประโยชน์&lt;br /&gt;
** หาตัวที่มากสุด k อันดับ&lt;br /&gt;
** เรียงลำดับข้อมูล&lt;br /&gt;
** Huffman Encoding&lt;br /&gt;
&lt;br /&gt;
== Operator Overloading ==&lt;br /&gt;
&lt;br /&gt;
=== Overload operator&amp;lt; ===&lt;br /&gt;
&lt;br /&gt;
=== compare class ===&lt;br /&gt;
&lt;br /&gt;
=== compare function ===&lt;br /&gt;
&lt;br /&gt;
== Implementing Data Structure ==&lt;br /&gt;
&lt;br /&gt;
=== vector ===&lt;br /&gt;
* You can find it in the slide of this course.&lt;br /&gt;
&lt;br /&gt;
=== Stack ===&lt;br /&gt;
* You can find it in the slide of this course.&lt;br /&gt;
&lt;br /&gt;
=== Queue ===&lt;br /&gt;
* You can find it in the slide of this course.&lt;br /&gt;
&lt;br /&gt;
=== priority queue ===&lt;br /&gt;
* -- ยกยอดไป final --&lt;br /&gt;
&lt;br /&gt;
== โจทย์ Challenge ==&lt;br /&gt;
* Perket [[http://www.programming.in.th/task/rev2_problem.php?pid=0019 LINK]]&lt;br /&gt;
* Numbers [[http://www.programming.in.th/task/rev2_problem.php?pid=0032 LINK]]&lt;br /&gt;
* Include [[http://www.programming.in.th/task/rev2_problem.php?pid=1057 LINK]]&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=2110101_com_prog&amp;diff=110</id>
		<title>2110101 com prog</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=2110101_com_prog&amp;diff=110"/>
		<updated>2019-03-07T17:19:54Z</updated>

		<summary type="html">&lt;p&gt;Tata: Created page with &amp;quot;&amp;lt;!-- มี COMMENT อยู่ 2 ที่นะ ตรง Link โจทย์ Challenge ข้างบน กับ เนื้อหา Final ข้างล่าง...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- มี COMMENT อยู่ 2 ที่นะ ตรง Link โจทย์ Challenge ข้างบน กับ เนื้อหา Final ข้างล่างทั้งหมด --&amp;gt;&lt;br /&gt;
ยินดีต้อนรับสู่ wiki เพื่อติว 2110101 Com Prog หรือเรียกง่ายๆว่า JAVA นั่นแหละ &amp;lt;br&amp;gt;&lt;br /&gt;
* '''โจทย์ทั้งหมดในนี้ และในตัวอย่างในห้อง และใน lab ควรทำให้ได้'''&lt;br /&gt;
* '''โจทย์ challenge ทำไม่ได้อย่าไปเครียด'''&lt;br /&gt;
* '''สำหรับเทพ java หรือคนที่ต้องการความท้าทายอย่างสุดๆ''' แนะนำโจทย์ challenge ด้านล่างสุด [[http://wiki.acioi.in.th/index.php/2110101_com_prog#.E0.B9.82.E0.B8.88.E0.B8.97.E0.B8.A2.E0.B9.8C_CHALLENGE_.28Midterm.29 คลิกที่นี่สำหรับ midterm]] [[http://wiki.acioi.in.th/index.php/2110101_com_prog#.E0.B9.82.E0.B8.88.E0.B8.97.E0.B8.A2.E0.B9.8C_CHALLENGE_.28Final.29 คลิกที่นี่สำหรับ final]]&lt;br /&gt;
* '''[http://goo.gl/ckyj1 Code แบบฝึกหัดใน JLab ของเรา]'''&amp;lt;br&amp;gt;&lt;br /&gt;
ปล. Page นี้ไม่มีเนื้อหานะ มีตัวอย่าง code / โจทย์ / เฉลย แค่นั้นนะ&amp;lt;br&amp;gt;&lt;br /&gt;
ปล. ขอบคุณพื้นที่ ของ ชมรมคอมพิวเตอร์โอลิมปิก โรงเรียนอัสสัมชัญ&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''โดย TATA201201 Gr.J 96 CP 39'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= รวมตัวอย่างข้อสอบ =&lt;br /&gt;
* '''Midterm'''&lt;br /&gt;
** [https://dl.dropbox.com/u/78864454/java/2110101-midterm-review.pdf ตัวอย่างข้อสอบ Midterm] จากประกาศของอาจารย์&lt;br /&gt;
** [https://dl.dropboxusercontent.com/u/78864454/java/2110101-midterm-2553-2.pdf ตัวอย่างข้อสอบ Midterm ชุดที่ 2] จากประกาศของอาจารย์&lt;br /&gt;
** [https://dl.dropboxusercontent.com/u/78864454/java/midterm_exercise_BY_TATA201201.pdf แนวข้อสอบ Midterm] แต่งโจทย์โดยพี่ต้า&lt;br /&gt;
* '''Final'''&lt;br /&gt;
** [https://dl.dropboxusercontent.com/u/78864454/java/2110101-final-example.pdf ตัวอย่างข้อสอบ Final] จากประกาศของอาจารย์&lt;br /&gt;
** [https://dl.dropboxusercontent.com/u/78864454/java/Final_exercise_BY_TATA201201.pdf แนวข้อสอบ Final] แต่งโดยพี่ต้า (โจทย์ค่อนข้างยาก)&lt;br /&gt;
*** [https://dl.dropboxusercontent.com/u/78864454/java/Final_exercise_GUIDE_BY_TATA201201.pdf เฉลย คำแนะนำ แนวข้อสอบ Final]&lt;br /&gt;
&lt;br /&gt;
= Intro=&lt;br /&gt;
== แนวที่สามารถออกข้อสอบได้ ==&lt;br /&gt;
เท่าที่นึกออก และเคยเจอมา ก็มีตามนี้&lt;br /&gt;
# ถามทฤษฎี ว่า ทำไมเป็นแบบนี้?&lt;br /&gt;
# มี output ให้ ถามว่าควรเขียนโปรแกรมยังไง?&lt;br /&gt;
# มีโปรแกรมมาให้ ถามว่า output คืออะไร&lt;br /&gt;
# เขียนโปรแกรม จาก flowchart&lt;br /&gt;
# เขียน flowchart จากโปรแกรมที่กำหนด&lt;br /&gt;
# หาจุดผิดพลาดในโปรแกรม&lt;br /&gt;
&lt;br /&gt;
= Midterm =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hello World ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class Test {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    System.out.println(&amp;quot;Hello World&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Flowchart ==&lt;br /&gt;
* '''ข้อที่ 1''' - จงเขียน flowchart ของโปรแกรม รับค่าจำนวน 1 จำนวน และหาค่าสัมบูรณ์ของจำนวนนั้น&lt;br /&gt;
* '''ข้อที่ 2''' - จงเขียน flowchart ของโปรแกรม รับค่าจำนวนไปเรื่อยๆจนกว่าจำนวนนั้นจะเป็นจำนวนลบ และหาค่าสูงสุด ต่ำสุด โดยขอบเขตของเลขมีค่าไม่ต่ำกว่า 0 และไม่มากกว่า 100,000&lt;br /&gt;
* '''ข้อที่ 3''' - จงเขียนโปรแกรมภาษา java จาก flowchart ที่กำหนดให้ [https://dl.dropbox.com/u/78864454/java/flowchart.jpg รูปอยู่ที่นี่]&lt;br /&gt;
&lt;br /&gt;
== System.out.println ==&lt;br /&gt;
* '''จุดสำคัญ'''&amp;lt;br&amp;gt;&lt;br /&gt;
# 0123 จะแสดงค่าเลข 123 ฐาน 8&amp;lt;br&amp;gt;&lt;br /&gt;
# 0x123 จะแสดงค่าเลข 123 ฐาน 16&amp;lt;br&amp;gt;&lt;br /&gt;
# การต่อข้อความ ใช้เครื่องหมาย + &amp;lt;br&amp;gt;&lt;br /&gt;
# ข้อความต่อตัวเลข จะได้ผลเป็นข้อความ &amp;lt;br&amp;gt;&lt;br /&gt;
# การทำงาน จะไล่ตามลำดับจากซ้ายไปขวา นะ &amp;lt;br&amp;gt;&lt;br /&gt;
# ใส่ comment จากจุดใดๆจนจบบรรทัด ใช้เครื่องหมาย //COMMENT &amp;lt;br&amp;gt;&lt;br /&gt;
# ใส่ comment เป็นช่วง อาจในบรรทัดเดียวหรือหลายบรรทัด ใช้เครื่องหมาย /*COMMENT*/ &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* '''ข้อที่ 1''' - จงหา output จากการรันโปรแกรมต่อไปนี้&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class Test {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    System.out.println(&amp;quot;Hello World&amp;quot;);&lt;br /&gt;
    System.out.println(0101);&lt;br /&gt;
    System.out.println(0xFF);&lt;br /&gt;
    System.out.println(6 + 5 + &amp;quot;ABC&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot;ABC&amp;quot; + 6 + 5);&lt;br /&gt;
    System.out.println(&amp;quot;HELLO&amp;quot; + &amp;quot;JAVA&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''ข้อที่ 2''' - บรรทัดใด รันแล้วผิด บ้าง???&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class Test2 {&lt;br /&gt;
  public static void main(String[] helloworld) {&lt;br /&gt;
    System.out.println /*COMMENT*/ (&amp;quot;HELLO&amp;quot;);&lt;br /&gt;
    System /*COMMENT*/.out.println(&amp;quot;HELLO&amp;quot;);&lt;br /&gt;
    System.out.println( /*&amp;quot;HELLO&amp;quot;*/ );&lt;br /&gt;
    System.out.println(&amp;quot;/*HELLO*/&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot;HELLO&amp;quot;)//;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ตัวแปร ==&lt;br /&gt;
* '''ข้อที่ 1''' - ข้างล่างนี้ ชื่อตัวแปรไหนที่ตั้งไม่ได้บ้าง???&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    Int   Main   Double   string   public   args   argv   Math   abc   $_MAIN   $$$555   123A   A1&lt;br /&gt;
    parseInt   nextline   nextDouble   new   Class   static   VOID   Comment   year   DOB   sum&lt;br /&gt;
    ^-^   java   jlab   Jlab   scanner   scanf   system   printLN   print   dynamic   statistics&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''ข้อที่ 2''' - ข้อใดใช้ตัวแปรไม่เหมาะสมบ้าง ??&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    1. ใช้ตัวแปรประเภท int เก็บข้อมูลรหัสนิสิต&lt;br /&gt;
    2. ใช้ตัวแปรประเภท int เก็บข้อมูลรหัสประจำตัวประชาชน&lt;br /&gt;
    3. ใช้ตัวแปรประเภท String เก็บข้อมูลชื่อ นามสกุล&lt;br /&gt;
    4. ใช้ตัวแปรประเภท double เก็บข้อมูลเกรดเฉลี่ย&lt;br /&gt;
    5. ใช้ตัวแปรประเภท double เก็บคะแนนที่ได้&lt;br /&gt;
    6. ใช้ตัวแปรประเภท int เก็บจำนวนคนที่มาเข้าร่วมงาน&lt;br /&gt;
    7. ใช้ตัวแปรประเภท double เก็บความเร็วที่รถวิ่ง&lt;br /&gt;
    8. ใช้ตัวแปรประเภท String เก็บข้อมูลรหัสนิสิต&lt;br /&gt;
    9. ใช้ตัวแปรประเภท int เก็บความเร็วของแสง&lt;br /&gt;
    10. ใช้ตัวแปรประเภท int เพื่อเป็นตัวแปรนับรอบในการวน loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scanner ==&lt;br /&gt;
* '''ข้อที่ 1''' - จงเขียนโปรแกรมเพื่อรับค่าข้อความ ชื่อ และนามสกุล และแสดงผล ว่า สวัสดี ชื่อ นามสกุล เช่น &amp;quot;สวัสดี เอ จาวา&amp;quot; เป็นต้น&lt;br /&gt;
* '''ข้อที่ 2''' - จงแก้ไขโปรแกรมต่อไปนี้ให้ถูกต้องเท่าที่จำเป็นเพียง 6 จุดเท่านั้น (บรรทัดเดียวกันแต่ไม่อยู่ติดกันถือว่าคนละจุด)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class Test4 {&lt;br /&gt;
  public static void main() {&lt;br /&gt;
    Scanner x = new Scanner(system.in());&lt;br /&gt;
    int a = kb.nextInt();&lt;br /&gt;
    int b = kb.nextInt();&lt;br /&gt;
    System.out.println(a + b);&lt;br /&gt;
    int c = a + b++&lt;br /&gt;
    double x = x.nextDouble();&lt;br /&gt;
    System.out.println(x + a + b + c);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''ข้อที่ 3''' - จงรับค่าจำนวนเต็ม 2 ค่าเก็บในตัวแปร a และ b และให้สลับค่าในตัวแปร a และ b จะเขียนอย่างไร&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    เช่น a=5, b=2 สลับแล้ว a=2, b=5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Operators ==&lt;br /&gt;
* '''ข้อที่ 1''' - จงหาผลจากการรันโปรแกรมต่อไปนี้&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class Test2 {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    int a = 5, b = 1, c;&lt;br /&gt;
    System.out.println(a + b);&lt;br /&gt;
    System.out.println(&amp;quot;a+b&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot;&amp;quot; + a + b);&lt;br /&gt;
    System.out.println(a + b + &amp;quot;&amp;quot;);&lt;br /&gt;
    System.out.println(c = a + b);&lt;br /&gt;
    System.out.println(c);&lt;br /&gt;
    System.out.println(a++);&lt;br /&gt;
    System.out.println(++b);&lt;br /&gt;
    System.out.println(a+++b++);&lt;br /&gt;
    System.out.println(a + &amp;quot; &amp;quot; + b);&lt;br /&gt;
    System.out.println(a+++(++b));&lt;br /&gt;
    c = a+++b+++a+++b+++a+++b+++a+++b++;&lt;br /&gt;
    c %= 100;&lt;br /&gt;
    System.out.println(a + &amp;quot; &amp;quot; + b + &amp;quot; &amp;quot; + c);&lt;br /&gt;
    System.out.println((int) 1.234 + (int) 1.987);&lt;br /&gt;
    System.out.println(a / b);&lt;br /&gt;
    System.out.println((double) a / b);&lt;br /&gt;
    double x = 1, y = 2e100, z = 050;&lt;br /&gt;
    System.out.println(y + x);&lt;br /&gt;
    System.out.println(x + z);&lt;br /&gt;
    System.out.println(a / b + x / b + z * 2 + 5 * 3 / 2);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''ข้อที่ 2''' - บรรทัดใดที่ไม่สามารถรันได้&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class Test3 {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    int a = 5, b, c;&lt;br /&gt;
    System.out.println(a + b);&lt;br /&gt;
    System.out.println(c = a);&lt;br /&gt;
    System.out.println(b = c - a);&lt;br /&gt;
    System.out.println(c = a + b; );&lt;br /&gt;
    System.out.println(a++++b++++c++++a);&lt;br /&gt;
    System.out.println(a+++b+++c++);&lt;br /&gt;
    System.out.println(c = a++);&lt;br /&gt;
    System.out.println(a + b * c / d + a * b * c);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''ข้อที่ 3''' - จงเขียนโปรแกรมเพื่อรับค่าจำนวนเงินที่ต้องการกด ATM และแสดงว่า เครื่อง ATM จะต้องจ่ายแบงค์ 1000, 500, 100 อย่าละกี่ใบ เศษที่เครื่อง ATM ไม่สามารถจ่ายได้จะไม่จ่ายทั้งสิ้น โดยกำหนดให้ เครื่อง ATM มีแบงค์แต่ละประเภทมากเพียงพอที่จะจ่ายให้&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
========== เฉลย ==========&lt;br /&gt;
import java.util.Scanner;&lt;br /&gt;
public class ATM {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Scanner kb = new Scanner(System.in);&lt;br /&gt;
    System.out.print(&amp;quot;Enter Money : &amp;quot;);&lt;br /&gt;
    int money = kb.nextInt();&lt;br /&gt;
    System.out.println(&amp;quot;1000 x &amp;quot; + money / 1000);&lt;br /&gt;
    System.out.println(&amp;quot; 500 x &amp;quot; + money % 1000 / 500);&lt;br /&gt;
    System.out.println(&amp;quot; 100 x &amp;quot; + money % 500 / 100);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
==========================&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== class Math ==&lt;br /&gt;
* '''ข้อที่ 1''' - เขียนโปรแกรมเพื่อสุ่มค่า ตั้งแต่ 1-6 โดยโอกาสที่จะสุ่มเจอ 1-6 ต้องเท่ากัน&lt;br /&gt;
* '''ข้อที่ 2''' - เขียนนิพจน์การคำนวณต่อไปนี้เป็นภาษาจาวา [https://dl.dropbox.com/u/78864454/java/equation.jpg คลิกที่นี่]&lt;br /&gt;
&lt;br /&gt;
== if..else.. ==&lt;br /&gt;
* '''ข้อที่ 1''' - จงเขียนโปรแกรมเพื่อหาค่าสัมบูรณ์ของตัวเลขจำนวนจริงที่รับเข้ามา โดยห้ามใช้ method abs &amp;lt;br&amp;gt;&lt;br /&gt;
* '''ข้อที่ 2''' - จงเขียนโปรแกรมเพื่อตัดเกรดจากคะแนนที่รับเข้ามาโดย&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    80&amp;lt;=x     คะแนนได้เกรด A&lt;br /&gt;
    75&amp;lt;=x&amp;lt;80  คะแนนได้เกรด B+&lt;br /&gt;
    70&amp;lt;=x&amp;lt;75  คะแนนได้เกรด B&lt;br /&gt;
    65&amp;lt;=x&amp;lt;70  คะแนนได้เกรด C+&lt;br /&gt;
    60&amp;lt;=x&amp;lt;65  คะแนนได้เกรด C&lt;br /&gt;
    55&amp;lt;=x&amp;lt;60  คะแนนได้เกรด D+&lt;br /&gt;
    50&amp;lt;=x&amp;lt;55  คะแนนได้เกรด D&lt;br /&gt;
        x&amp;lt;50  คะแนนได้เกรด F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''ข้อที่ 3''' - จงเขียนโปรแกรมเพื่อรับค่า A B C แล้วแก้สมการกำลังสอง Ax^2+Bx+C=0 แล้วแสดงคำตอบ ถ้ามี 1 คำตอบ ให้แสดงคำตอบนั้น ถ้ามี 2 คำตอบ ให้แสดง 2 คำตอบ ถ้าไม่มีคำตอบที่เป็นจำนวนจริง ให้แสดงข้อความว่า &amp;quot;Imaginary Number&amp;quot;&lt;br /&gt;
* '''ข้อที่ 4''' - จงเขียนนิพจน์เพื่อตรวจสอบเงื่อนไขต่อไปนี้ if(นิพจน์) หมายความว่าไม่ต้องเขียนคำว่า if และวงเล็บ นะ&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    1. เลขหลักร้อยของ x มีค่ามากกว่าเลขหลักหน่วย&lt;br /&gt;
    2. จำนวนเต็มที่รับเข้ามาเป็นจำนวนเต็มบวก&lt;br /&gt;
    3. a มีค่าไม่มากไปกว่า b&lt;br /&gt;
    4. x มีค่าเป็น 2 เท่าของ y&lt;br /&gt;
    5. จำนวนเต็ม x มีค่าเป็นครึ่งหนึ่งของจำนวนเต็ม y&lt;br /&gt;
    6. เลขหลักร้อยของ x มีค่าเป็น 7&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== while / for loop ==&lt;br /&gt;
* '''ข้อที่เป็น loop 2 ชั้นเป็นของไฟนอลนะ คาดการณ์ผิดไปนิดนึง'''&lt;br /&gt;
* '''ข้อที่ 1''' - จงเขียนโปรแกรมเพื่อแสดงคำว่า &amp;quot;hello java&amp;quot; จำนวน 10 บรรทัด&lt;br /&gt;
* '''ข้อที่ 2''' - จงเขียนโปรแกรมรับค่า n และแสดงเลขตั้งแต่ 1 ถึง n &lt;br /&gt;
* '''ข้อที่ 3''' - จงเขียนโปรแกรมรับค่าเลขจำนวนเต็มบวกไปเรื่อยๆ ถ้าจำนวนที่รับเข้ามาไม่ใช่จำนวนเต็มบวกให้ออกจากโปรแกรม และแสดงค่า สูงสุด ต่ำสุด ของจำนวนที่รับเข้ามา ไม่นับตัวสุดท้ายที่เพิ่งจะรับเข้าไป&lt;br /&gt;
* '''ข้อที่ 4''' - จงเขียนโปรแกรมรับค่าจำนวนเต็ม n และแสดงค่า 1+2+3+...+n และ n! คนละบรรทัด&lt;br /&gt;
* '''ข้อที่ 5''' - จงเขียนโปรแกรมรับค่า จำนวนเต็ม m และ n ให้แสดงค่าผลของ n ยกกำลัง m โดยห้ามใช้ Method pow&lt;br /&gt;
* '''ข้อที่ 6''' - จงเขียนโปรแกรมเพื่อคำนวณค่าต่อไปนี้ โดยรับ input เป็นค่า x และ จำนวนพจน์ที่ต้องการคำนวณ และแสดงค่าที่คำนวณได้ [https://dl.dropbox.com/u/78864454/java/Theoritical%20Com%20Science%20Cheat%20Sheet_Page_09.jpg รูปอยู่ที่นี่]&amp;lt;br&amp;gt;&lt;br /&gt;
* '''ข้อที่ 7''' - จงเขียนโปรแกรมเพื่อแสดงค่าลำดับฟิโบนักชี โดยรับค่า n แล้วแสดงลำดับฟิโบนักชี่เฉพาะพจน์ที่มีค่า น้อยกว่า n เท่านั้นในบรรทัดเดียว (Quiz section 8)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    เช่น n=50&lt;br /&gt;
    OUTPUT : 1 1 2 3 5 8 13 21 34&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''ข้อที่ 8''' - รับจำนวนเต็ม n แล้วตรวจสอบว่า จำนวนนั้นเป็นจำนวนเฉพาะหรือเปล่า??&amp;lt;br&amp;gt;&lt;br /&gt;
* '''ข้อที่ 9''' - รับจำนวนเต็ม n แล้วแสดงค่าจำนวนเฉพาะที่น้อยกว่า n ทั้งหมด (ปล. สามารถปรับปรุงให้โปรแกรมมีประสิทธิภาพได้โดยใช้ array มาช่วย)&lt;br /&gt;
* '''ข้อที่ 10''' - รับจำนวนเต็ม n แทนจำนวน * ให้แสดง * เท่าจำนวนนั้น&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    เช่น n=4&lt;br /&gt;
    OUTPUT : ****&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''ข้อที่ 11''' - รับจำนวนเต็ม n แทนจำนวนชั้นของ *&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    เช่น n=4&lt;br /&gt;
    OUTPUT : ****&lt;br /&gt;
             ****&lt;br /&gt;
             ****&lt;br /&gt;
             ****&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''ข้อที่ 12''' - รับจำนวนเต็ม n แทนจำนวนชั้นของ *&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    เช่น n=4&lt;br /&gt;
    OUTPUT : *&lt;br /&gt;
             **&lt;br /&gt;
             ***&lt;br /&gt;
             ****&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''ข้อที่ 13''' - รับจำนวนเต็ม n แทนจำนวนชั้นของ *&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    เช่น n=4&lt;br /&gt;
    OUTPUT : ****&lt;br /&gt;
             ***&lt;br /&gt;
             **&lt;br /&gt;
             *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''ข้อที่ 14''' - รับจำนวนเต็ม n แทนจำนวนชั้นของ *&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    เช่น n=4&lt;br /&gt;
    OUTPUT :    *&lt;br /&gt;
               **&lt;br /&gt;
              ***&lt;br /&gt;
             ****&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''ข้อที่ 15''' - รับจำนวนเต็ม n แทนจำนวนชั้นของ *&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    เช่น n=4&lt;br /&gt;
    OUTPUT : ****&lt;br /&gt;
              ***&lt;br /&gt;
               **&lt;br /&gt;
                *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''ข้อที่ 16''' - รับจำนวนเต็ม n แทนจำนวนชั้นของ *&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    เช่น n=4&lt;br /&gt;
    OUTPUT :    *&lt;br /&gt;
               ***&lt;br /&gt;
              *****&lt;br /&gt;
             *******&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''ข้อที่ 17''' - รับจำนวนเต็ม n ความยาวของกังหัน &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    เช่น n=4&lt;br /&gt;
    OUTPUT : *     *&lt;br /&gt;
              *   *&lt;br /&gt;
               * *&lt;br /&gt;
                *&lt;br /&gt;
               * *&lt;br /&gt;
              *   *&lt;br /&gt;
             *     *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''ข้อที่ 18''' - รับจำนวนเต็ม n ความยาวของกังหัน &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    เช่น n=4&lt;br /&gt;
    OUTPUT : 4     4&lt;br /&gt;
              3   3&lt;br /&gt;
               2 2&lt;br /&gt;
                1&lt;br /&gt;
               2 2&lt;br /&gt;
              3   3&lt;br /&gt;
             4     4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''ข้อที่ 19''' - รับจำนวนเต็ม n แทนจำนวนชั้นของภูเขา และจงหาผลรวมของแกนกลางภูเขาด้วย&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    เช่น n=4&lt;br /&gt;
    OUTPUT :    0&lt;br /&gt;
               123&lt;br /&gt;
              45678&lt;br /&gt;
             9012345&lt;br /&gt;
             ผลรวมแกนกลาง = 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== string ==&lt;br /&gt;
* '''ข้อที่ 1''' - เขียนโปรแกรมเพื่อรับคำมา 2 คำ ในบรรทัดเดียวกัน แล้วตรวจสอบว่า คำทั้ง 2 คือคำเดียวกันหรือไม่ โดย อักษรพิมพ์ใหญ่และพิมพ์เล็กคือตัวเดียวกัน&lt;br /&gt;
* '''ข้อที่ 2''' - เขียนโปรแกรมรับค่า string 2 บรรทัด โดย บรรทัดแรกคือต้นแบบ บรรทัดที่ 2 คือคำที่ต้องการค้นหา ถ้าพบคำที่ต้องการค้นหาในสตริงแรก ให้แสดงว่า คำนั้นอยู่ตำแหน่งแรกที่ใด ถ้าไม่พบให้แสดง -99&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    ตำแหน่ง     : 012345678901234567890123&lt;br /&gt;
    คำ         : CHULALONGKORN UNIVERSITY&lt;br /&gt;
    คำที่ต้องการหา :                  VERS&lt;br /&gt;
    ต้องแสดงว่าอยู่ตำแหน่งที่ 17&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''ข้อที่ 3''' - เขียนโปรแกรมรับค่า string 1 บรรทัด และแสดงค่า สตริงนั้นกลับจากหน้าไปหลัง&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    INPUT  : HELLO JAVA&lt;br /&gt;
    OUTPUT : AVAJ OLLEH&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''ข้อที่ 4''' - เขียนโปรแกรมรับค่า string 1 บรรทัด และแสดงค่า สตริงนั้นกลับจากหน้าไปหลัง เฉพาะในคำคำนั้น&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    INPUT  : HELLO JAVA I LOVE YOU&lt;br /&gt;
    OUTPUT : OLLEH AVAJ I EVOL UOY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''ข้อที่ 5''' - จงรับเข้าคำ 1 คำ แล้วตรวจสอบว่า คำนั้นเป็น พาลินโดรมหรือไม่ ??? โดยอักษรพิมพ์ใหญ่ และพิมพ์เล็กเป็นตัวเดียวกัน&lt;br /&gt;
* '''ข้อที่ 6''' - จงรับเข้าสตริง 1 สตริง แล้วตรวจสอบว่า สตริงนั้นเป็น พาลินโดรมหรือไม่ ??? โดยไม่สนใจช่องว่าง และอักษรพิมพ์ใหญ่ และพิมพ์เล็กเป็นตัวเดียวกัน&lt;br /&gt;
* '''ข้อที่ 7''' - รับเข้าสตริง 1 สตริงที่ประกอบด้วยอักษรพิมพ์ใหญ่ และช่องว่างเท่านั้น และรับค่าจำนวนเต็มเป็น key จงเข้ารหัสสตริงนั้น โดยขยับอักษรไปจำนวนเท่ากับ key เช่น Z และ key=1 จะขยับไปเป็น A&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    String : ABCXYZ&lt;br /&gt;
    KEY    : 2&lt;br /&gt;
    OUTPUT : CDEZAB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== file ==&lt;br /&gt;
* '''ข้อที่ 1''' - จงเขียนโปรแกรมเพื่อรับเข้าคำศัพท์ 1 คำ แล้วแสดงความหมายของมัน โดยคำศัพท์สามารถหาได้จาก [https://dl.dropbox.com/u/78864454/java/dictionary.txt ที่นี่] ถ้าหากไม่พบคำศัพท์ให้แสดงว่า &amp;quot;Word Not Found&amp;quot; โดยรูปแบบของไฟล์นำเข้า ดูได้จากไฟล์จริง นะ&lt;br /&gt;
&lt;br /&gt;
== array 1 มิติ ==&lt;br /&gt;
* '''ข้อที่ 1''' - เขียนโปรแกรมรับจำนวนเต็ม n และ p โดย n แทนจำนวนตัวเลขที่ต้องการ และ p เป็นเลขที่ต้องการค้นหา จากนั้นรับจำนวนเต็มอีก n จำนวน โดย n จำนวนนั้นเรียงลำดับจากน้อยไปหามาก จงค้นหาว่า จำนวนเต็ม p อยู่เป็นลำดับที่เท่าไรในจำนวนเต็ม n จำนวนนั้น โดยกำหนดให้ ลำดับเริ่มต้นจาก 1, 2, 3, ..., n&lt;br /&gt;
* '''ข้อที่ 2''' - เขียนโปรแกรมเพื่อรับจำนวนเต็ม n และจากนั้นรับจำนวนเต็มอีก n จำนวน ให้แสดงผลจำนวนเต็มที่ n จำนวนที่เรียงลำดับแล้ว (ห้ามใช้ method sort())&lt;br /&gt;
* '''ข้อที่ 3''' - เขียนโปรแกรมเพื่อรับจำนวนเต็ม n แทนจำนวนนักเรียนทั้งหมด จากนั้นอีก n บรรทัด แต่ละบรรทัดรับค่า ชื่อ และคะแนนที่ได้เป็นจำนวนเต็ม จากนั้นรับจำนวนเต็ม k และแสดงผลชื่อของคนที่ได้คะแนน k คะแนน และบรรทัดสุดท้าย ให้แสดงด้วยว่า มีคนได้ k คะแนนกี่คน โดยถ้าไม่มี ให้แสดงว่ามี 0 คน&lt;br /&gt;
* '''ข้อที่ 4''' - เขียนโปรแกรมรับค่าจำนวนเต็มในฐานสิบ และแสดงว่า จำนวนเต็มนั้นมีค่าเท่าใดในฐานสอง&lt;br /&gt;
&lt;br /&gt;
== โจทย์ CHALLENGE (Midterm) ==&lt;br /&gt;
* '''ข้อที่ 1 OLYMPICS''' - จงรับค่าตัวเลขเข้าไป 1 ตัว และถ้าหากแปลงเป็นเลขฐานสองแล้ว ตัดตัวเลข 1 ในฐานสองหลักสุดท้ายที่ปรากฎออก จะมีค่าเท่าใดในฐานสิบ &amp;lt;br&amp;gt;&lt;br /&gt;
เช่น ตัวเลข 6 มีค่าในฐานสองคือ 110 ถ้าตัดเลข 1 หลักสุดท้าย ซึ่งอยู่ตำแหน่งที่ 2 ออก จะได้ 100 มีค่าเท่ากับ 4 ในฐานสิบ&amp;lt;br&amp;gt;&lt;br /&gt;
คำท้า : สามารถเขียนได้ในบรรทัดเดียว (; เดียว หรือหมายความว่าคำสั่งเดียวนั่นแหละ) ไม่รวมการรับเข้าข้อมูล&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    Hint : ........ ยังไม่บอก&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''ข้อที่ 2''' - รับจำนวนเต็ม n แทนจำนวนชั้นของต้นคริสมาส โดยต้นคริสมาสจะประกอบด้วยอักษร A-Z เท่านั้น โดยถ้าวนถึง Z แล้วจะกลับมา A ใหม่&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    เช่น n=5&lt;br /&gt;
    OUTPUT :     A&lt;br /&gt;
                 BC&lt;br /&gt;
               FED&lt;br /&gt;
                 GHIJ&lt;br /&gt;
             ONMLK &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Final =&lt;br /&gt;
== if..else.. ภาค2 ==&lt;br /&gt;
&lt;br /&gt;
== for ภาค2 ==&lt;br /&gt;
&lt;br /&gt;
== method ==&lt;br /&gt;
&lt;br /&gt;
== array 2 มิติ ==&lt;br /&gt;
&lt;br /&gt;
== Dwindow ==&lt;br /&gt;
&lt;br /&gt;
== recursive function ==&lt;br /&gt;
&lt;br /&gt;
== class ==&lt;br /&gt;
&lt;br /&gt;
== โจทย์ CHALLENGE (Final) ==&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Base_Conversion_in_bignum&amp;diff=109</id>
		<title>Base Conversion in bignum</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Base_Conversion_in_bignum&amp;diff=109"/>
		<updated>2019-03-07T17:19:38Z</updated>

		<summary type="html">&lt;p&gt;Tata: Created page with &amp;quot;แปลงจาก Bignum Integer เป็น String ในฐานต่างๆ http://stackoverflow.com/questions/5833858/c-fast-base-convert-from-decimal-to-ternary/...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;แปลงจาก Bignum Integer เป็น String ในฐานต่างๆ&lt;br /&gt;
http://stackoverflow.com/questions/5833858/c-fast-base-convert-from-decimal-to-ternary/5834086#5834086&lt;br /&gt;
http://www.codeproject.com/Articles/16035/Base-Conversion-of-Very-Long-Positive-Integers&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ta.in.th/index.php?title=Struct&amp;diff=108</id>
		<title>Struct</title>
		<link rel="alternate" type="text/html" href="https://wiki.ta.in.th/index.php?title=Struct&amp;diff=108"/>
		<updated>2019-03-07T17:19:22Z</updated>

		<summary type="html">&lt;p&gt;Tata: Created page with &amp;quot;== การทำ constructor แบบสั้น (เพิ่งไปเจอมาเจ๋งดีเลยเอามาลง ถึงจะสั้นกว่...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การทำ constructor แบบสั้น (เพิ่งไปเจอมาเจ๋งดีเลยเอามาลง ถึงจะสั้นกว่าไม่เท่าไหร่ก็เหอะ 555+) ==&lt;br /&gt;
&lt;br /&gt;
* ส่วนที่ทำตัวหนา คือ ส่วนของการประกาศ constructor&lt;br /&gt;
 struct DOC{&lt;br /&gt;
     int docid;&lt;br /&gt;
     double rank;&lt;br /&gt;
     '''''DOC( int i, double r ) : docid(i), rank(r) {}'''''&lt;br /&gt;
 };&lt;br /&gt;
 credit : http://stackoverflow.com/questions/2574060/c-min-heap-with-user-defined-type&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== การประกาศ Constructor แบบปกติ ==&lt;br /&gt;
&lt;br /&gt;
* เมื่อเรามี struct มาแล้วใน struct นั้นมีตัวแปรอยู่หลายตัว  เช่น&lt;br /&gt;
 struct ST{&lt;br /&gt;
     int id;&lt;br /&gt;
     double value;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
* เมื่อเราประกาศตัวแปร struct ชื่อ a ขึ้นมา แล้วต้องการกำหนดค่าตัวแปร id=1    value=3.5 เราต้องพิมพ์&lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     ST a;&lt;br /&gt;
     a.id = 1;&lt;br /&gt;
     a.value = 3.5;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* แต่เราสามารถกำหนด constructor ขึ้นมาเพื่อง่ายต่อการกำหนดได้ เช่น&lt;br /&gt;
 struct ST{&lt;br /&gt;
     int id;&lt;br /&gt;
     double value;&lt;br /&gt;
     ST(int xxx, double yyy)&lt;br /&gt;
     {&lt;br /&gt;
         id = xxx;&lt;br /&gt;
         value = yyy;&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
* แต่ถ้าเขียนแบบด้านบนจะไม่สามารถประกาศตัวแปร struct โล่งๆแค่นี้ได้&lt;br /&gt;
 ST a;&lt;br /&gt;
* แต่ต้องเขียนแบบนี้ (กำหนดให้ a.id=1    และ    a.value = 3.5)&lt;br /&gt;
 ST a'''''(1,3.5)''''';&lt;br /&gt;
* หรือ แบบนี้ (กำหนดให้ a.id=1    และ    a.value = 3.5)&lt;br /&gt;
 ST a='''''ST(1,3.5)''''';&lt;br /&gt;
&lt;br /&gt;
* ซึ่งมีวิธีแก้คือแก้เป็นแบบนี้ (แล้วเมื่อไม่ได้ใส่ parameter ใดเข้าไปจะมีค่าตามที่เรากำหนดไว้  ซึ่งจากในโค้ดตัวอย่างคือกำหนดให้เป็น 0 กับ 0.0)&lt;br /&gt;
 struct ST{&lt;br /&gt;
     int id;&lt;br /&gt;
     double value;&lt;br /&gt;
     ST(int xxx'''''=0''''', double yyy'''''=0.0''''')&lt;br /&gt;
     {&lt;br /&gt;
         id = xxx;&lt;br /&gt;
         value = yyy;&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
* เช่นถ้าประกาศอย่างนี้ x.id=0 และ x.value=0.0&lt;br /&gt;
 ST a;&lt;br /&gt;
* เช่นถ้าประกาศอย่างนี้ x.id=1 และ x.value=0.0&lt;br /&gt;
 ST a(1);&lt;br /&gt;
* เช่นถ้าประกาศอย่างนี้ x.id=1 และ x.value=3.5&lt;br /&gt;
 ST a(1,3.5);&lt;/div&gt;</summary>
		<author><name>Tata</name></author>
		
	</entry>
</feed>