Webアプリ習作#10

Tweetをデータとして管理する

アプリを介したツイートをアプリ側でも見れるようにしたいのでツイートの情報をDBのデータとして管理する仕組みを作成

tweetsテーブルの作成

プロジェクトディレクトリにて以下を実行

php artisan make:migration create_tweets_table --create=tweets

database/migrations下に[日付]_create_tweets_table.phpというファイルが生成されるので下記のように修正

    public function up()
    {
        Schema::create('tweets', function (Blueprint $table) {
            $table->bigIncrements('id');
            // ここからを追加.
            $table->text('body');
            $table->bigInteger('user_id')->unsigned()->index();
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
            // ここまでを追加.
            $table->timestamps();
        });
    }
マイグレーションの実行

プロジェクトディレクトリにて以下を実行

php artisan migrate
DBの確認

psqlを起動してDBに接続

\c twiapp_db

テーブル一覧を確認してtweetsテーブルが追加されていることを確認

\dt

テーブルの中身を確認

\d tweets
     列     |             タイプ             | 照合順序 | Null 値を許容 |             デフォルト
------------+--------------------------------+----------+---------------+------------------------------------
 id         | bigint                         |          | not null      | nextval('tweets_id_seq'::regclass)
 body       | text                           |          | not null      |
 user_id    | bigint                         |          | not null      |
 created_at | timestamp(0) without time zone |          |               |
 updated_at | timestamp(0) without time zone |          |               |
Modelの作成

プロジェクトディレクトリにて以下を実行

php artisan make:model Models/Tweet

app/Models/Tweet.phpが作成されることを確認

Userモデルと連携

app/Models/User.phpを開いて以下を追加

    public function tweets()
    {
        return $this->hasMany(Tweet::class);
    }

app/Models/Tweet.phpに以下を追加

    public function user()
    {
        return $this->belongsTo(User::class);
    }
ツイート実行と同時にデータを追加するように修正

resources/views/test.blade.phpを修正

<?php
// ここからを追加.
namespace App\Models;
use Illuminate\Support\Facades\Auth;
// ここまでを追加.
use Abraham\TwitterOAuth\TwitterOAuth;
function testTweet(){
    $twitter = new TwitterOAuth( env('TWITTER_CLIENT_ID'),
        env('TWITTER_CLIENT_SECRET'),
        "メモしたtokenの文字列",
        "メモしたtokenSecretの文字列" );

    $body = 'テストツイートです'; // ここを追加.

    $twitter->post("statuses/update", [
       "status" =>
            $body // ここを修正.
        ]);

    // ここからを追加.
    $tweet = new Tweet();
    $tweet->body = $body;
    $tweet->user_id = Auth::user()->id;
    $tweet->save();
    // ここまでを追加.
}
動作確認

http://localhost:8000にアクセスして"テストツイートをする"をクリック
Twitter上にテストツイートが追加されていると同時にDBのtweetsテーブルにデータが追加されていることを確認

\c twiapp_db
select * from tweets;