Laravel/Chat
1. 기본 스키마 세팅
짱구를왜말려?
2021. 1. 15. 17:53
반응형
SMALL
# What?
- 채팅 구현을 위한 테이블 설계
# How?
php artisan make:model -m Message
php artisan make:model -m Chat
php artisan make:resource UserResource
php artisan make:resource MessageResource
php artisan make:resource ChatResource
php artisan make:resource UserCollection
php artisan make:resource MessageCollection
php artisan make:resource ChatCollection
php artisan make:controller UserController
php artisan make:controller MessageController
php artisan make:controller ChatController
@ create_messages_table.php
Schema::create('messages', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger("chat_id");
$table->foreign("chat_id")->references("id")->on("chats")->onDelete("cascade");
$table->unsignedBigInteger("sender_id");
$table->foreign("sender_id")->references("id")->on("users")->onDelete("cascade");
$table->unsignedBigInteger("receiver_id");
$table->foreign("receiver_id")->references("id")->on("users")->onDelete("cascade");
$table->index(["chat_id", "receiver_id"]);
$table->boolean("read")->default(false);
$table->string("body");
$table->timestamps();
});
@ Message.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Message extends Model
{
use HasFactory;
protected $fillable = ["body", "chat_id", "receiver_id", "sender_id"];
public function chat()
{
return $this->belongsTo(Chat::class);
}
public function user()
{
return $this->belongsTo(User::class);
}
}
@ create_chats.php
public function up()
{
Schema::create('chats', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
@ Chat.php
class Chat extends Model
{
use HasFactory;
protected $fillable = ["message_id", "session_id", "user_id", "read"];
public function messages()
{
return $this->hasMany(Message::class);
}
}
@ User.php
public function chats()
{
return $this->belongsToMany(Chat::class);
}
@ create_chat_user_table.php
Schema::create('chat_user', function (Blueprint $table) {
$table->unsignedBigInteger("chat_id");
$table->foreign("chat_id")->references("id")->on("chats")->onDelete("cascade");
$table->unsignedBigInteger("user_id");
$table->foreign("user_id")->references("id")->on("users")->onDelete("cascade");
$table->index(["chat_id", "user_id"]);
$table->unique(["chat_id", "user_id"]);
$table->timestamps();
});
* 나머지 Resource, Collection은 알아서 설정하자.
LIST