Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > บทความจากสมาชิก > Laravel::Eloquent ORM Part 1 ทำการให้คำสั่งคิวรี่สั้นได้อีก



 
Clound SSD Virtual Server

Laravel::Eloquent ORM Part 1 ทำการให้คำสั่งคิวรี่สั้นได้อีก

Laravel::Eloquent ORM Part 1 ทำการให้คำสั่งคิวรี่สั้นได้อีก ต่อจากคราวก่อนครั้งนี้เราจะนำคำสั่งคราวก่อนมาใช้ใน Model แล้วทำให้สั้นได้อีก จะทำยังไงมาตลอดตามเลยครับ

Eloquent ORM
คือ Orm ของ laravel ครับแต่ถูกออกแบบมาให้สั้นกว่าเข้าใจได้ง่ายกว่าครับ อย่างข้างล่างใน framework อื่นเราสืบทอดมาจาก model ใน laravel เราสืบทอดจาก eloquent ครับ

Code (PHP)
class User extends Eloquent {}

laravel-eloquent

โครงสร้าง
• ทุกตารางจะมี primary key คือ id
• ทุกตารางจะใช้ชื่อ Model ตรงๆเลย เพื่อความกระชับและเข้าใจง่าย
ถ้าเราอยากใช้ชื่ออื่นเป็นชื่อตาราง หรือคอลัมอื่นเป็น primary key ก็แค่ประกาศครับ

Code (PHP)
	class User extends Eloquent {
	 
	     public static $table = 'my_users';
	 
	     public static $key = 'my_primary_key';
	 
	}


Retrieving Models(การค้นหาข้อมูล)
อย่างที่บอกไว้บอกตอนท้ายบทก่อนว่าเราจะย่อให้สั้นอีก บทก่อนเราใช้ DB :: (‘User)-> บททนี้เราย่อให้ชื่อตารางแทนเลย

Code (PHP)
	$user = User::find(1);
	 
	echo $user->email;

ข้างล่างคือ sql ที่ออกมาครับ

Code (PHP)
	SELECT * FROM "users" WHERE "id" = 1

ถ้าจะค้นแบบ * ครับ

Code (PHP)
	$users = User::all();
	 
	foreach ($users as $user)
	{
	     echo $user->email;
	}


ฟังชันอะไรที่ใช้ในบทก่อน เราก็ใช้ได้ในบทนี้ครับ

Code (PHP)
	$user = User::where('email', '=', $email)->first();
	 
	$user = User::where_email($email)->first();
	 
	$users = User::where_in('id', array(1, 2, 3))->or_where('email', '=', $email)->get();
	 
	$users = User::order_by('votes', 'desc')->take(10)->get();



Aggregates เหมือนบทก่อนเลยครับแต่ย่อได้อีก

Code (PHP)
	$min = User::min('id');
	$max = User::max('id');
	$avg = User::avg('id');
	$sum = User::sum('id');
	$count = User::count();
	$count = User::where('id', '>', 10)->count();



Inserting & Updating Models(เพิ่มและแก้ไข)

การ insert ก็แค่สร้าง object ใหม่แล้วเรียกใช้แต่ละคอลัมในตารางนั้น แล้วก็เรียกฟังก์ชัน save ครับ

Code (PHP)
	$user = new User;
	 
	$user->email = '[email protected]';
	$user->password = 'secret';
	 
	$user->save();


ใช้ create ในการสร้าง column ใหม่ครับ

Code (PHP)
$user = User::create(array('email' => '[email protected]'));


จะแก้ไขก็ง่ายๆ ครับ หาข้อมูลแถวที่เราจะแก้ไขแล้วก็แทรกข้อมูลที่เราจะแก้ไขลงไปก็เสร็จแล้ว

Code (PHP)
	$user = User::find(1);
 
	$user->email = '[email protected]';
	$user->password = 'new_secret';
	 
	$user->save();


เราอยากจะบันทึกเวลาการสร้างหรือแก้ไขข้อมูลลงไปด้วย ง่ายๆเลยครับ ด้วยการใช้ฟังก์ชันข้างล่าง

Code (PHP)
class User extends Eloquent {
	 
	     public static $timestamps = true;
	 
	}


เราต้องสร้างคอลัมน์ชื่อ created_at กับ updated_at ไว้ด้วยนะครับ laravel จะบันทึกข้อมูลเวลาลงในคอลัมทั้งสองโดยอัตโนมัติ

บางครั้งเราอยากจะแก้ไขคอลัม updated_at ในตอนที่เราไม่ได้แก้ไขข้อมูล อาจจะเป็นเรียกขึ้นมาดูเฉยก็ใช้ ฟังก์ชัน touch เลยครับ

Code (PHP)
	$comment = Comment::find(1);
	$comment->touch();


หรือจะใช้ฟังก์ชัน timestamp แทนก็ได้ครับ

Code (PHP)
	$comment = Comment::find(1);
	$comment->timestamp();
	//do something else here, but not modifying the $comment model data
	$comment->save();


Relationships(การเชื่อมตาราง)

การเชื่อมตารางของ laravel มี 4 รูปแบบ ครับ
has_one = แบบ 1 ต่อ 1 belongs_to = แบบกลุ่มต่อ 1
has_many = แบบ 1 ต่อ กลุ่ม has_many_and_belongs_to = แบบกลุ่มต่อกลุ่ม


1 ต่อ 1

จากตัวอย่าง ผู้ใช้งานหนึ่งคนมีโทรศัพท์หนึ่งเครื่อง

Code (PHP)
	class User extends Eloquent {
	 
	     public function phone()
	     {
	          return $this->has_one('Phone');
	     }
	 
	}


เวลาจะใช้งานก็เป็นแบบนี้เลยครับ

Code (PHP)
$phone = User::find(1)->phone()->first();


จากข้างบนถ้าจะเขียนเป็น Sql ธรรมดาก็จะเป็นแบบนี้ครับ

Code (PHP)
	SELECT * FROM "users" WHERE "id" = 1
	 
	SELECT * FROM "phones" WHERE "user_id" = 1

ปกติ Eloquent จะตรวจว่าคอลัมไหนเป็นคีย์เชื่อมจาก “ชื่อคอลัมน์_id” ถ้าคีย์เชื่อมของเราไม่เป็นรูปแบบตามนั้นก็สามารถเปลียนโดยเพิ่ม พารามิเตอร์ตัวที่สองไปเหมือนตัวอย่างข้างล่างครับ

Code (PHP)
	return $this->has_one('Phone', 'my_foreign_key');


เหมือนกับ framework ตัวอื่นนะครับการดึงข้อมูลก็จะเป็นแบบลูกโซ่ ที่จะไปดึงตัวที่ตารางนั้นไปเชิ่อมมาด้วย

Code (PHP)
	$phone = User::find(1)->phone;


ถ้าเราเอาคีย์เชิ่อมไปวางไว้ที่ตารางไหน ตารางที่เอาไปวางไว้นั้นก็ต้องวาง belongs_to ไว้ เพื่อบอกว่า phone สังกัดอยู่กับ user

Code (PHP)
	class Phone extends Eloquent {
	 
	     public function user()
	     {
	          return $this->belongs_to('User');
	     }
	 
	}


เมื่อเชื่อมกันแล้วจะค้นหาข้อมูลที่เกี่ยวข้องกันก็ง่ายหละครับ

Code (PHP)
	echo Phone::find(1)->user()->first()->email;
	 
	echo Phone::find(1)->user->email;



1-ต่อ-กลุ่ม

ยกตัวอย่าง 1 บทความมีหลายความคิดเห็น กรณีนี้เราก็ต้องใช้ has_many หละครับ:

Code (PHP)
	class Post extends Eloquent {
	 
	     public function comments()
	     {
	          return $this->has_many('Comment');
	     }
	 
	}


เวลาเราจะค้นก็เหมือนข้างล่างเลยครับ

Code (PHP)
	$comments = Post::find(1)->comments()->get();
	 
	$comments = Post::find(1)->comments;


ตัวอย่างแรกจะเป็นการค้น posts ต่อมาเป็นการค้น comments

Code (PHP)
	SELECT * FROM "posts" WHERE "id" = 1
	 
	SELECT * FROM "comments" WHERE "post_id" = 1


เราย่อคำสั่ง sql ยาวให้เข้าใจง่ายภายในบรรทัดเดียวได้เลย:

Code (PHP)
	echo Post::find(1)->comments()->order_by('votes', 'desc')->take(10)->get();


กลุ่ม-ต่อ-กลุ่ม
ความสัมพันธ์แบบกลุ่มต่อกลุ่ม มักจะมีความยุ่งยากมาก หลาย framework ก็ยังจัดการได้ไม่ค่อยดี. For example, ยกตัวอย่าง ผู้ใช้งานมีได้หลายสิทธิ์,แต่ละสิทธ์ก็มีได้ในผู้ใช้หลายคน.ตารางสามอันนี้ทำให้เกิดความงงขึ้นได้บ่อยเลยครับ : ตารางผู้ใช้งาน, ตารางสิทธิ์, ตารางบอกว่าใครทำอะไรได้บ้าง. โครงสร้างจะเป็นแบบตัวอย่าง

Code (PHP)
// users:
	id    - INTEGER
	email - VARCHAR
// roles:
	id   - INTEGER
	name - VARCHAR
// role_user:
	id      - INTEGER
	user_id - INTEGER
	role_id - INTEGER


ใน laravel จะใช้ has_many_and_belongs_to สั้นๆ เลยครับ

Code (PHP)
class User extends Eloquent {
	 
	     public function roles()
	     {
	          return $this->has_many_and_belongs_to('Role');
	     }
	 
	}


เวลาจะค้นก็แบบนี้เลยครับง่ายมาก ข้างล่างเราจะค้นว่า user นี้ มี role อะไรบ้าง

Code (PHP)
$roles = User::find(1)->roles()->get();


เวลาจะค้นว่ามีผู้ใช้กี่คนที่มีสิทธิ์นี้ก็ตามข้างล่างเลยครับ

Code (PHP)
	$roles = User::find(1)->roles;


ถ้าคีย์ที่ใช้เชื่อมไม่เหมือนกับที่ laravel เราก็แค่ส่งพารามิเตอร์ไปบอกด้วย

Code (PHP)
	class User extends Eloquent {
	 
	     public function roles()
	     {
	          return $this->has_many_and_belongs_to('Role', 'user_roles');
	     }
	 
	}


โดยค่าเริ่มต้น ตารางที่ใช้เชื่อมจะส่งแค่ค่า id

Code (PHP)
	class User extends Eloquent {
	 
	     public function roles()
	     {
	          return $this->has_many_and_belongs_to('Role', 'user_roles')->with('column');
	     }
	 
	}


มีต่ออีกนะครับมันยาวมาเขียนไม่หมด







   
Share
Bookmark.   

  By : taqman
  Article : บทความเป็นการเขียนโดยสมาชิก หากมีปัญหาเรื่องลิขสิทธิ์ กรุณาแจ้งให้ทาง webmaster ทราบด้วยครับ
  Score Rating :
  Create Date : 2013-05-16
  Download : No files
Sponsored Links
ThaiCreate.Com Forum


Comunity Forum Free Web Script
Jobs Freelance Free Uploads
Free Web Hosting Free Tools

สอน PHP ผ่าน Youtube ฟรี
สอน Android การเขียนโปรแกรม Android
สอน Windows Phone การเขียนโปรแกรม Windows Phone 7 และ 8
สอน iOS การเขียนโปรแกรม iPhone, iPad
สอน Java การเขียนโปรแกรม ภาษา Java
สอน Java GUI การเขียนโปรแกรม ภาษา Java GUI
สอน JSP การเขียนโปรแกรม ภาษา Java
สอน jQuery การเขียนโปรแกรม ภาษา jQuery
สอน .Net การเขียนโปรแกรม ภาษา .Net
Free Tutorial
สอน Google Maps Api
สอน Windows Service
สอน Entity Framework
สอน Android
สอน Java เขียน Java
Java GUI Swing
สอน JSP (Web App)
iOS (iPhone,iPad)
Windows Phone
Windows Azure
Windows Store
Laravel Framework
Yii PHP Framework
สอน jQuery
สอน jQuery กับ Ajax
สอน PHP OOP (Vdo)
Ajax Tutorials
SQL Tutorials
สอน SQL (Part 2)
JavaScript Tutorial
Javascript Tips
VBScript Tutorial
VBScript Validation
Microsoft Access
MySQL Tutorials
-- Stored Procedure
MariaDB Database
SQL Server Tutorial
SQL Server 2005
SQL Server 2008
SQL Server 2012
-- Stored Procedure
Oracle Database
-- Stored Procedure
SVN (Subversion)
แนวทางการทำ SEO
ปรับแต่งเว็บให้โหลดเร็ว


Hit Link
   







Load balance : Server 05
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่