< 테이블 생성 >

게시글 : 댓글 = 1:다 관계


//=================

* 게시글 테이블 생성


CREATE TABLE `article`  (

  `atc_no1` int(255) UNSIGNED NOT NULL AUTO_INCREMENT,

  `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,

  `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,

  PRIMARY KEY (`atc_no1`) USING BTREE

) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;


-- ----------------------------

-- Records of article

-- ----------------------------

INSERT INTO `article` VALUES (1, '글 1', '내용 1');

INSERT INTO `article` VALUES (2, '글 2', NULL);

INSERT INTO `article` VALUES (3, '글 3', NULL);

INSERT INTO `article` VALUES (4, '글 4', '내용 4');



//=================

* 댓글 테이블 생성

- 일부러 article.atc_no1 과 연결된 칼럼을 다른 이름(atc_no2)로 설정

- 외래키는 설정하지 않음, 외래키는 제약을 걸어 무결성을 높이는 역할, 실제 검색 동작등에는 없어도 무관


CREATE TABLE `comment`  (

  `cmt_no2` int(255) UNSIGNED NOT NULL AUTO_INCREMENT,

  `atc_no2` int(255) UNSIGNED NOT NULL,

  `content2` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,

  PRIMARY KEY (`cmt_no2`) USING BTREE

) ENGINE = InnoDB AUTO_INCREMENT = 91 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;


-- ----------------------------

-- Records of comment

-- ----------------------------

INSERT INTO `comment` VALUES (10, 1, '댓글 1');

INSERT INTO `comment` VALUES (20, 1, '댓글 11');

INSERT INTO `comment` VALUES (30, 3, '댓글 31');

INSERT INTO `comment` VALUES (40, 3, '댓글 32');

INSERT INTO `comment` VALUES (50, 3, '댓글 33');

INSERT INTO `comment` VALUES (60, 4, '댓글 41');

INSERT INTO `comment` VALUES (70, 4, '댓글 42');

INSERT INTO `comment` VALUES (80, 4, '댓글 43');

INSERT INTO `comment` VALUES (90, 4, '댓글 44');



//=============================================================================

< 라라벨 모델 생성 >

App\Models 폴더 생성


//============

//게시물 모델

php artisan make:model Models\Article


//Article.php 수정

class Article extends Model

{

    protected $table = 'article';

    protected $primaryKey = 'atc_no1';

    public function comments(){

        return $this->hasMany('App\Models\Comment', 'atc_no2');

//'atc_no2'=comment테이블에 존재하는 외래키

    }

}


//===========

//댓글 모델

php artisan make:model Models\Comment


//Comment.php 수정

class Comment extends Model

{

    protected $table = 'comment';

    protected $primaryKey = 'cmt_no2';


    public function article(){

        return $this->belongsTo('App\Models\Article', 'atc_no2');

//'atc_no2'=comment테이블에 존재하는 외래키

    }

}



//=============================================================================

< 리소스 컨트롤러 >

php artisan make:resource test\TestController


//TestController.php 수정

class TestController extends Controller

{

    public function index()

    {

        $c1 =0;

        $rets = null;


        //========================

        //게시글 -> 댓글

        /*$atcs = Article::where('atc_no1', '>=', 2)

            ->with('comments') //즉시로딩

            ->get();


        $cmts = collect();

        foreach($atcs as $atc){

            $cmt = $atc->comments;

            if( count($cmt) == 0) continue;            

            $c1 += count($cmt);

            $cmts->push($cmt);

        }

        $rets = $cmts;*/


        //=================

        //댓글 -> 게시글

        $cmts = Comment::where('cmt_no2','>=',2)

                ->with('article')

                ->get();

        

        $atcs = collect();

        foreach($cmts as $cmt){

            $atc = $cmt->article;

            if( count($atc) ==0) continue;

            $c1 += count($atc);

            $atcs->push($atc);

        }

        $rets = $atcs;


        //================        

        dump($c1);

        dump($rets);

        //die;

        return view('test.test')->with('rets', $rets);

        return 'test-index';

    }



//=============================================================================

< 블레이드 >


//=====================

//resource\test\test.blade.php


<!DOCTYPE html>

<html lang='ko'>

<head>

    <meta charset='utf-8'>

</head>

<body>

    @section('head')

        <h1>head</h1>

    @stop


    @section('article')

    @foreach($rets as $ret)        

        {{--@include('test.test2');--}}

        @include('test.test2');

    @endforeach

    @show


</body>

</html>



//=====================

//test1.blade.php - 댓글 출력

@foreach($ret as $ret2)

{{ 'comment - '.$ret2->cmt_no2.' - '.$ret2->atc_no2.' - '.$ret2->content2  }} <br>

@endforeach



//=====================

//test2.blade.php - 게시글 출력

{{ 'article - '.$ret->atc_no1.' - '.$ret->title.' - '.$ret->content }} <br>


'Code' 카테고리의 다른 글

[JavaScript] jQuery 나라별 언어 국제화 방법  (0) 2018.11.27
[라라벨] 즉시로딩 (Eager Loading) 사용 예제  (0) 2018.11.20
라라벨 DB Eloquent ORM  (0) 2018.11.16
라라벨 DB 빌더  (0) 2018.11.16
라라벨 컬렉션  (0) 2018.11.16
Visual studio code 사용법  (0) 2018.11.13
Posted by 코덴스

댓글을 달아 주세요