250x250
반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- CSS
- nodejs
- polygon
- Setting
- miniconda
- React
- node
- 라라벨
- nft
- Python
- Remix
- PM2
- threejs
- netfunnel
- 공연티켓
- 배포
- 회고
- Ai
- pagination
- exceljs
- Laravel
- Kaikas
- nginx
- NextJS
- 블록체인
- 발행
- chatGPT
- git
- metamask
- jquery
Archives
- Today
- Total
박주니 개발 정리
기본적인 게시판 작성 방법 본문
728x90
반응형
먼저 진행하기에 앞서서 라라벨 crud를 숙지하시고 보시길 바랍니다.
그럼 현재 글을 작성하면 화면에 작성된 글이 append될 수 있게 만듭니다.
주의할 점)
- board db에 user_id를 만들어놓습니다. 이유는 해당 user_id에 따라서 아이디 및 게시판 글 내용이 보이게 할 예정입니다.
기본 상식)
- user_id는 기본적으로 로그인을 진행했을 때 라라벨은 그 유저 데이터를 가지고 있으므로 controller에서 _contstruct middleware auth를 연결해서 사용하면 find를 하지 않아도 해당 유저 id를 가지고 올 수 있습니다.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Board;
use App\Models\User;
class BoardController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
public function index(){
$boards = Board::all();
return view('users.index', compact('boards'));
}
public function create(Request $request){
$you = auth()->user();
$user_id = $you->id;
Board::create([
'title' => $request->title,
'user_id' => $user_id
]);
return redirect()->back();
}
}
- 설명) _construct()를 연결하고 나서 추가버튼을 클릭시 auth()->user()을 dd()로 확인해보고 제대로 나오면 그때 따로 id를 빼내서 추가해주시길 바랍니다.
이제 user_id에 있는 email을 불러오겠습니다.
1. Board model에서 User model을 연결하고 belongsTo를 설정합니다.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Models\User;
class Board extends Model
{
use HasFactory;
protected $fillable = [
'title',
'user_id'
];
public function user()
{
return $this->belongsTo(User::class, 'user_id');
}
}
참고) belongsTo(User::class, 'user_id') 의미
- User primary key를 Board column 'user_id'에 연결한다는 의미입니다. 지금 Board DB에서 user_id에 숫자로 저장되어있다면 그것은 user에 primary key에 해당되기 때문에 그 key에 해당되는 User 데이터를 가져온다는 의미입니다.
2. BoardController에서 데이터를 get하는 class에 with()를 활용해서 board model에 belongsTo 설정한 user을 가지고옵니다.
public function index(){
$you = auth()->user();
$user_id = $you->id;
$boards = Board::with('user')->where('user_id', $user_id)->get();
return view('users.index', compact('boards'));
}
참고) Board::with('user')의 의미
- Board와 User을 user_id 기준으로 join하는 개념으로 이해하시면 됩니다. 만약 join에 대해서 이해가 안되신다면 mysql에서 join을 어떻게 활용하는 지 개념정도 파악해주시길 바랍니다.
Tip) Log를 설정하고 Log::info로 $boards가 제대로 relationship이 되어서 user_id에 연결된 user data가 제대로 나오는 지 확인해주시길 바랍니다. 이유는 현재 다루고 있는 코드 경로가 다룰 수 있고 그 전에 오류가 나올 수 있기 때문에 계속 확인하면서 값을 전달하는 습관을 가지는게 좋습니다. dd()로 확인할 때 오류가 발생되는 경우가 있어서 추천하지 않습니다.
3. blade에 해당 email과 그 유저가 작성한 게시글을 가지고 옵니다.
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">board</div>
<div>
<h2>title</h2>
<div>
@foreach ($boards as $board)
{{ $board->user->email }}
{{ $board->title }}
@endforeach
</div>
</div>
<form action= {{ route('board.create') }} method="POST">
@csrf
<h2>title</h2>
<input type="text" name="title">
<button type="submit">create</button>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
참고) $board->user->email 설명
- 먼저 blade에서 foreach문안에 $board가 어떻게 전달되는지 dd($board)로 확인해주시길 바랍니다.
- 상단에 보이는 것처럼 현재 join된 user에 정보는 "user" 배열에 있는 것이 보이기 때문에 $board->user하면 join된 user 정도에 접촉할 수 있고 거기서 필요한 정보는 email이기 때문에 $board->user->email 하시면 게시글을 작성한 이메일을 확인할 수 있습니다.
Tip) 이것을 응용하면 댓글을 만들 수 있으니 정확히 이해하시면 어렵지 않습니다.
728x90
반응형
Comments