model

๋ชจ๋ธ

class User extends Authenticatable
{
    use HasFactory, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

์œ„๋Š” ๋ผ๋ผ๋ฒจ์˜ ๊ธฐ๋ณธ์ ์œผ๋กœ ์žˆ๋Š” User๋ชจ๋ธ์ด๋‹ค.

fillable๋กœ ๋Œ€๋Ÿ‰ํ• ๋‹น ์ปฌ๋Ÿผ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ณ , hiddenํ”„๋กœํผํ‹ฐ๋กœ ์กฐํšŒ ์ฟผ๋ฆฌ์‹œ ์ œ์™ธํ•  ์—ด์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ชจ๋ธ ๋งŒ๋“ค๊ธฐ

$ php artisan make:model Post
$ php artisan make:model Author

์ง์ ‘ ํƒ€์ดํ•‘ํ•ด์„œ ๋งŒ๋“ค์–ด๋„ ๋˜์ง€๋งŒ ์•„ํ‹ฐ์ฆŒ๋ช…๋ น์–ด ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ชจ๋ธ์˜ ๋ผˆ๋Œ€ ์ฝ”๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ app/Models/ํ•˜์œ„์— ์ƒ์„ฑ์ด๋œ๋‹ค.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use HasFactory;
}

์ž๋™์œผ๋กœ ์œ„์™€ ๊ฐ™์ด ๋งŒ๋“ค์–ด์ง€๋Š”๋ฐ Illuminate\Database\Eloquent\Model๋ฅผ ์ƒ์†ํ•˜๊ธฐ๋งŒํ•˜๋ฉด ๋ชจ๋ธ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

๋ณดํ†ต ํ…Œ์ด๋ธ”์ด๋ฆ„์€ ์—ฌ๋Ÿฌ์ปฌ๋Ÿผ์„ ๊ฐ€์ง€๊ณ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์ˆ˜๋กœ ์ง“์ง€๋งŒ ๋ชจ๋ธ์€ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ๋‹ด๊ณ  ์žˆ๊ธฐ ๋Œ€๋ฌธ์— ์ฃผ๋กœ ๋‹จ์ˆ˜๋กœ ์ง“๋Š”๋‹ค. ์ด๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ๋‹จ์ˆ˜๊ฐ€ ๋ณต์ˆ˜๋กœ ๋ณ€๊ฒฝ๋˜ ๋งตํ•‘๋˜๊ณ , ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋งตํ•‘์„ ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด protected $table = 'ํŠน์ • ์ด๋ฆ„';์„ ์ •์˜ํ•ด ๋ช…์‹œํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

tinker

repl์€ ์ฝ˜์†” ํ™˜๊ฒฝ์—์„œ ๋ช…๋ น์„ ๋‚ด๋ฆฌ๊ณ  ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ์ด๋ฉฐ tinker๋Š” ๋ผ๋ผ๋ฒจ์ด ์ œ๊ณตํ•˜๋Š” repl์ด๋‹ค.

php artisan tinker๋กœ tinker๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

>>> DB::select('SELECT * FROM posts');
>>> DB::insert('INSERT INTO posts(title,body) VALUES(?.?), ['Hello','Hi']);
>>> $posts = DB::select('SELECT * FROM posts');
>>> $posts[0]->title;
>>> $posts = DB::selectOne('SELECT * FROM WHERE id = ?',[1]);

tinker์ฝ˜์†”์— ์œ„์™€ ๊ฐ™์ด DB::insert()/selct()๋“ฑ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ  ์ด๋•Œ DB๋Š” ๋ผ๋ผ๋ฒจ์˜ ํŠน์ˆ˜ํ•œ ๋ฌธ๋ฒ•์ธ ํŒŒ์‚ฌ๋“œ(Facade)๋ผ๊ณ  ํ•œ๋‹ค.

์œ„์™€ ๊ฐ™์ด ์ง์ ‘ ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์‹ค์ „์—์„œ๋Š” ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ฟผ๋ฆฌ ๋นŒ๋”

SQL๋ฌธ์žฅ์„ phpํด๋ž˜์Šค ๋ฌธ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•œ ๊ฒƒ์œผ๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ query๋ฅผ buildํ•ด์ค€๋‹ค.

get

>>> DB::table('posts')->get();
>>> DB::table('posts')->first();
>>> DB::table('posts')->find(2);
>>> DB::table('posts')->get(['Hello','id']);

where

>>> DB::table('posts')->where('id', '=', 1)->get();
>>> DB::table('posts')->where('id', 1)->get();
>>> DB::table('posts')->whereId(1)->get();
>>> DB::table('posts')->where(function ($query){query -> where('id',1);})->get();

4๊ฐœ ๋ชจ๋‘ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์ฒซ๋ฒˆ์งธ์™€ ๊ฐ™์ด ์กฐ๊ฑด์ ˆ์ด =์ผ ๊ฒฝ์šฐ์—๋Š” ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 3๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ๋ฉ”์„œ๋“œ๋ช…์„ ๋ณด๊ณ  ๋™์ ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์นด๋ฉœํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ํ‘œ๊ธฐํ•˜๋ฉด ๋˜๊ณ , ๋ณต์žกํ•œ ์กฐ๊ฑด์ผ ๊ฒฝ์šฐ์—๋Š” ํด๋กœ์ €๋ฅผ ์ด์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์ด์™ธ์—๋„ insert(array $v),update(associate array $v), delete(int $id), pluck(string $col, string $key = null), limit(int $v), orderBy(string $col, string $dir='asc'), count, distinct,join, union๋“ฑ ์›ฌ๋งŒํ•œ SQL๋ฌธ์„ ๋ฉ”์„œ๋“œ๋กœ ํ‘œํ˜„๊ฐ€๋Šฅํ•˜๋‹ค.

Last updated