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); }
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;