BackEND/Laravel Project

테이블, 컨트롤, 뷰, 모델 이해

smartlittlepuppy 2022. 7. 31. 12:56
반응형

1. 데이타베이스연결하기 : .env파일에서 설정 할 수 있다. 

DB_CONNECTION=mysql

DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
 
config > database.php에가서 어떤 데이타베이스 사용할건지 확인. 기본은 mysql로 되어
 
있다. 
 
새로운어드민을 데이타베이스에 추가해서 사용할 수 있다. 그러면 기존에 XAMPP에서 제공해주는것이 아니라, 
내가 지정한 USERNAME, PASSWORD를 지정 할 수 있다. 
 
CREATE USER 'someuser'@'localhost' IDENTIFIED BY 'somepassword';
GRANT ALL PRIVILEGES ON TO 'someuser'@'localhost';
FLUSH PRIVILEGES;

SHOW GRANTS FOR 'someuser'@'localhost';

2. 라라벨을 설치을 하면, 기본적으로 라라벨에서제공해주는 테이블이 있다.

사용자인증에 관련된것들이 기본설치가 되어있다. 

라라벨이 기본적으로 제공해준다.

이것을 데이타베이스 테이블에 적용하려면 아래와 같은 명령어를 사용해야한다. 

php artisan migrate

 

3. 라라벨에서 기본으로 제공해주는 것 이외에 테이블을 만들고 싶다면, 명령어는 다음과 같다. 

예를 들면, products라는 테이블을 만들고 싶다면 아래와 같이 적는다.  

php artisan make:migration create_products_table

 

database>migrations>2022_07_28_013933_create_products_table.php 이런 파일이 생긴다.

기본적으로 아래와 같이 나오는데 timestamps()는 created_at, updated_at이라는 필드를 자동으로 만들어준다. 

이곳에 우리가 필요한 필드들을 추가시키고, 그것을 php artisan migrate명령어를 통해서 테이블을 데이타베이스에 올려준다. 

public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('products');
    }​
public function up()
{
    Schema::create('products', function (Blueprint $table) {
        $table->id();
        //$table->integer('user_id')->unsigned()->index(); 
        // users table의 id를 참조한다. 해당사용자가 작성한 글 삭제 cascade
        $table->foreignId(('user_id'))->constrained('users')->onDelete('cascade');
        $table->string('title');
        $table->string('brand');
        $table->string('price');
        $table->string('cat');
        $table->string('photo')->nullable();
        $table->text('memo');
        $table->timestamps();
    });
}

위와같이 추가 시켜주었다. users테이블의 user_id라는 이름으로 외래키로 추가시켰다. 이것을 php artisan migrate통해 디비에 위의 테이블을 올려준다.  

 

데이타베이스에서 SQL export시켜보면, 아래와같이 확인할 수 있다. 

CREATE TABLE `likes` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `user_id` bigint(20) UNSIGNED NOT NULL,
  `products_id` bigint(20) UNSIGNED NOT NULL,

  `body` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

 

CREATE TABLE `products` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `user_id` bigint(20) UNSIGNED NOT NULL,
  `title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `brand` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `price` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `cat` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `photo` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `memo` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

 

CREATE TABLE `users` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `email_verified_at` timestamp NULL DEFAULT NULL,
  `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

4. URL에 따른 경로를 설정 할 수 있다.

http://localhost/products 이면  products페이지를 보여주고 http://localhost/about이면 about페이지를 보여주고 하는 등 경로설정할 수 있다. routes > web.php

 
Route::get('/products', [ProductController::class, 'index'])->name('products');

/products접속시, ProductController클래스의  index메소드를 불러온다는 뜻이다. 

뷰페이지에서 products폴더안에 있는 vitamin.blade.php를 불러온다.

5. 컨트롤러만들기

Auth라는 폴더에 RegisterController를 만든다. 

php artisan make:controller Auth\RegisterController

 

ProductsController를 만든다.

php artisan make:controller ProductsController

 

컨트롤러에서는 폼에서 값이 넘어오면 그것을 Request로 받아서 그데이타들을 create, delete, update, Read를 시켜준다. 

 

6. 모델 만들기 

Products라는 모델을만든다 

php artisan make:model Products

폼에서 넘어올 데이타들을$fillable에 넣어야한다.  

protected $fillable = [ 'title', 'brand', 'price', 'cat', 'photo', 'memo' ];

 

7. 뷰페이지 만들기

뷰페이지

8. Products테이블에 수십개의 데이타를 무작위로 넣기 : tinker 사용한다. 

php artisan tinker

App\Models\Products::factory()->times(100)->create(['user_id' => 1]);

Products모델에 factory를 이용해서 100번 가짜데이타를 생성한다. user_id가 1로 지정한곳에 다 가 이렇게 하겠다고 하는 뜻.

.Net core MVC의 dbseeder와 비슷한 것 같다.  

 

 

반응형

'BackEND > Laravel Project' 카테고리의 다른 글

라라벨에서 어드민계정을 만드는방법 breeze  (0) 2022.08.04
피드백만들기  (0) 2022.07.31
Create , Read, Update, Delete  (0) 2022.07.31