kotaro-ktr
@kotaro-ktr (Kotaro Tanaka)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

laravelのmysqlでカラムがありませんとエラーが出ました。

解決したいこと

Laravelの学習で簡単なツイートアプリを作成中です。
ツイートしたメッセージ(bodyカラム)が画面上に表示されるようにしたはずなのですが、”tweetsテーブルにそのようなカラムは存在しません。”とエラーが出てしまいます。

発生している問題・エラー

image.png

該当するソースコード

マイグレーションファイル

<?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

1Answer

SQLのエラーかと思われます。
tweetsテーブルの中にbodyカラムはありますか?

1Like

Comments

  1. @kotaro-ktr

    Questioner

    ご回答ありがとうございます。
    tweetsテーブルを見たところ、まだbodyカラムは存在しませんでした。
    まだ作成しているテーブルがかなり少ないため、以下のサイトを参考に php artisan migrate:refresh を実行し、再びサーバーアクセスしたところ、うまくbody要素が表示されました。

    https://snow-cat.net/?p=613

Your answer might help someone💌