has-one-through & has-many-through Laravel Eloquent Relationships (phần 1)
Ví dụ 1: Tạo dữ liệu projects, users, tasks
C:\xampp\htdocs\hanam.com\routes\web.php
<?php
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
// Route::get('/user', function(){
// factory(\App\User::class,5)->create();
// });
Route::get('/user', function () {
// $user = factory(\App\User::class)->create();
// \App\Address::create([
// "user_id" => $user->id,
// "country" => "Ha Nam 10"
// ]);
// $user->address()->create([
// "country" => "Ha Nam 9"
// ]);
// $users = \App\User::all();
// $addresses = \App\Address::all();
// $users = \App\User::with('addresses')->get();
// $users = \App\User::get();
// Hoặc dùng cách khác
// $users = \App\User::with('posts')->get();
// $users = \App\User::has('posts','>=',2)->with('posts')->get();
// $users = \App\User::whereHas('posts',function($query) {
// $query->where('title','like','%Post 2%');
// })->with('posts')->get();
$users = \App\User::doesntHave('posts')->with('posts')->get();
// $users[0]->posts()->create([
// "title" => "Post 1 Test"
// ]);
// $users[2]->posts()->create([
// "title" => "Post 2 Test"
// ]);
return view('users.index', compact('users'));
});
Route::get('/posts', function () {
// \App\Post::create([
// 'user_id' => 1,
// 'title' => 'Post title 1'
// ]);
// $posts = \App\Post::get();
// \App\Tag::create([
// 'name' => 'Lavarel'
// ]);
// \App\Tag::create([
// 'name' => 'PHP'
// ]);
// \App\Tag::create([
// 'name' => 'Javascript'
// ]);
// \App\Tag::create([
// 'name' => 'VueJs'
// ]);
// $tag = \App\Tag::first();
// $post = \App\Post::first();
// $post = \App\Post::with('tags')->first();
// $post->tags()->attach($tag);
// $post->tags()->attach([1,2,3,4]);
// $post->tags()->sync([1,2,3,4]);
// $post->tags()->detach([1]);
$post = \App\Post::first();
$posts = \App\Post::with(['user', 'tags'])->get();
// $post->tags()->sync([
// 2 => [
// 'status' => 'approved',
// ],
// ]);
// dd($post->tags->first()->pivot->status);
// Post::delete();
return view('posts.index', compact('posts'));
});
Route::get('/tags', function () {
$tags = \App\Tag::with("posts")->get();
return view('tags.index', compact('tags'));
});
Route::get('/projects', function () {
// $project = \App\Project::create([
// 'title' => 'Project B',
// ]);
// $user1 = \App\User::create([
// 'name' => 'User 1',
// 'email' => 'user1@gmail.com',
// 'password' => Hash::make('password'),
// 'project_id' => $project->id,
// ]);
// $user2 = \App\User::create([
// 'name' => 'User 2',
// 'email' => 'user2@gmail.com',
// 'password' => Hash::make('password'),
// 'project_id' => $project->id,
// ]);
// $task1 = \App\Task::create([
// 'title' => 'Task 1 for project 1 by user 1',
// 'user_id' => $user1->id,
// ]);
// $task2 = \App\Task::create([
// 'title' => 'Task 2 for project 1 by user 1',
// 'user_id' => $user1->id,
// ]);
// $task3 = \App\Task::create([
// 'title' => 'Task 3 for project 1 by user 2',
// 'user_id' => $user2->id,
// ]);
// $project = \App\Project::create([
// 'title' => 'Project B',
// ]);
// $user1 = \App\User::create([
// 'name' => 'User 3',
// 'email' => 'user3@gmail.com',
// 'password' => Hash::make('password'),
// 'project_id' => $project->id,
// ]);
// $user2 = \App\User::create([
// 'name' => 'User 4',
// 'email' => 'user4@gmail.com',
// 'password' => Hash::make('password'),
// 'project_id' => $project->id,
// ]);
// $user5 = \App\User::create([
// 'name' => 'User 5',
// 'email' => 'user5@gmail.com',
// 'password' => Hash::make('password'),
// 'project_id' => $project->id,
// ]);
// $task1 = \App\Task::create([
// 'title' => 'Task 4 for project 2 by user 3',
// 'user_id' => $user1->id,
// ]);
// $task2 = \App\Task::create([
// 'title' => 'Task 4 for project 2 by user 3',
// 'user_id' => $user1->id,
// ]);
// $task3 = \App\Task::create([
// 'title' => 'Task 5 for project 2 by user 4',
// 'user_id' => $user2->id,
// ]);
// $task6 = \App\Task::create([
// 'title' => 'Task 6 for project 2 by user 5',
// 'user_id' => $user5->id,
// ]);
$project = \App\Project::find(1);
return $project->users[0];
});C:\xampp\htdocs\hanam.com\app\Project.php
C:\xampp\htdocs\hanam.com\app\Task.php
C:\xampp\htdocs\hanam.com\app\User.php
C:\xampp\htdocs\hanam.com\routes\web.php





Ví dụ 2: Vấn đề được đặt ra là để lấy dữ liệu từ project đến tasks ta phải sử dụng như sau

Nhưng bây giờ ta muốn lấy trực tiếp??
Như vậy trong C:\xampp\htdocs\hanam.com\app\Project.php
Ta thay
PreviousHandle events on attach, detach or sync in Many To Many Laravel Eloquent Relationships (ok)Nexthas-one-through & has-many-through Laravel Eloquent Relationships (phần 2)
Last updated
Was this helpful?