has-one-through & has-many-through Laravel Eloquent Relationships (phần 1)
Ví dụ 1: Tạo dữ liệu projects, users, tasks
<?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];
});




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

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