laravelのmysqlでカラムがありませんとエラーが出ました。
解決したいこと
Laravelの学習で簡単なツイートアプリを作成中です。
ツイートしたメッセージ(bodyカラム)が画面上に表示されるようにしたはずなのですが、”tweetsテーブルにそのようなカラムは存在しません。”とエラーが出てしまいます。
発生している問題・エラー
該当するソースコード
マイグレーションファイル
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('tweets', function (Blueprint $table) {
$table->id();
$table->string('body', '255');//←このカラムが存在しないと出てきているようです。
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('tweets');
}
};
indexビューファイル(投稿したツイートが表示されるホーム画面です。)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Twitter風アプリ</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<div class="container">
<div class="page-header">
<h1>ツイート一覧</h1>
</div>
<div class="row">
<div class="col-md-2">
<a class="btn btn-primary" href="/tweets/create">ツイート新規投稿</a>
</div>
<div class="col-md-10">
<table class="table">
<tbody>
@foreach($tweets as $tweet)
<tr>
<td>{{ $tweet->body }}</td>
<td class="text-right"></td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>
createビューファイル(ツイートを投稿する画面です。)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Twitter風アプリ</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<div class="container">
<div class="page-header">
<h1>ツイート新規投稿</h1>
</div>
<div class="row">
<div class="col-md-12">
<form action="/tweets" method="post">
{!! csrf_field() !!}
<div class="form-group row">
<label class="col-xs-2 col-form-label">ツイート本文</label>
<div class="col-xs-10">
<input type="text" name="body" class="form-control" placeholder="ツイート本文を入力してください。"/>
</div>
</div>
<div class="form-group row">
<div class="col-xs-offset-2 col-xs-10">
<button type="submit" class="btn btn-primary">投稿する</button>
</div>
</div>
</form>
</div>
</div>
</div>
</body>
</html>
Tweetモデルファイル(モデル作成後編集していません)
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Tweet extends Model
{
use HasFactory;
}
ツイートコントローラーファイルです。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Tweet;
class TweetController extends Controller
{
public function index()
{
$tweets = Tweet::all();
return view('index', [
'tweets' => $tweets,
]);
}
public function create()
{
return view('create');
}
public function store(Request $request)
{
$tweet = new Tweet;
$tweet->body = $request->input('body');
$tweet->save();
return redirect('/tweets');
}
}
routeファイルです
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\TweetController;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get
('/', function () {
return view('welcome');
});
Route::get('/tweets', [TweetController::class, 'index']);
Route::get('/tweets/create', [TweetController::class, 'create']);
Route::post('/tweets',[TweetController::class, 'store']);
自分で試したこと
マイグレーションファイルを見直し後、再度マイグレートしてみました。
0