質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

解決済

PHP/Laravelのリレーションが上手く行かない

TakuMa
TakuMa

総合スコア9

Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1回答

0リアクション

0クリップ

211閲覧

投稿2022/08/10 04:52

編集2022/08/10 05:57

前提

PHP/Laravel でツイッターのようなwebサイトを作りたいと考えています。

実現したいこと

  • リツイート機能の追加

発生している問題・エラーメッセージ

・$fire->retweeted()を指定してもリツイート投稿が出てこない

該当のソースコード

PHP/Laravel

モデルファイル <Fire.php> /** * あるリツイート投稿自体を指す */ public function retweeted() { $this->hasMany(Retweet::class, 'retweeted_id', 'id'); } /** * あるリツイート投稿の引用元を指す */ public function retweeting() { $this->hasOne(Retweet::class, 'retweeting_id', 'id'); } マイグレーションファイル (retweets) public function up() { Schema::create('retweets', function (Blueprint $table) { $table->bigIncrements('id'); $table->unsignedBigInteger('retweeted_id'); $table->foreign('retweeted_id')->references('id')->on('fires')->onDelete('cascade'); $table->unsignedBigInteger('retweeting_id'); $table->foreign('retweeting_id')->references('id')->on('fires')->onDelete('cascade'); $table->timestamps(); //この後追加 $table->unsignedBigInteger('retweeting_id')->nullable()->change(); }); } (fires) Schema::create('fires', function (Blueprint $table) { $table->bigIncrements('id'); $table->unsignedBigInteger('user_id'); $table->string('content'); $table->timestamps(); // 外部キー制約 $table->foreign('user_id')->references('id')->on('users'); }); MySQL firesテーブル ----+---------+---------+---------------------+---------------------+ | id | user_id | content | created_at | updated_at | +----+---------+---------+---------------------+---------------------+ | 74 | 1 | 1 | 2022-08-09 17:37:02 | 2022-08-09 17:37:02 | | 86 | 1 | 2 | 2022-08-10 13:48:41 | 2022-08-10 13:48:41 | | 87 | 1 | 2 | 2022-08-10 13:48:42 | 2022-08-10 13:48:42 | +----+---------+---------+---------------------+---------------------+ retweetsテーブル +----+--------------+---------------+---------------------+---------------------+ | id | retweeted_id | retweeting_id | created_at | updated_at | +----+--------------+---------------+---------------------+---------------------+ | 18 | 86 | 87 | 2022-08-10 13:48:42 | 2022-08-10 13:48:42 | +----+--------------+---------------+---------------------+---------------------+ >>> $fire = Fire::find(86); => App\Fire {#4290 id: 86, user_id: 1, content: "2", created_at: "2022-08-10 13:48:41", updated_at: "2022-08-10 13:48:41", } >>> $fire->hasMany(Retweet::class, 'retweeted_id', 'id')->get(); => Illuminate\Database\Eloquent\Collection {#4286 all: [ App\Retweet {#4306 id: 18, retweeted_id: 86, retweeting_id: 87, created_at: "2022-08-10 13:48:42", updated_at: "2022-08-10 13:48:42", }, ], } >>> $fire->retweeted(); => null

試したこと

tinker で $fire = Fire::first(); として、その投稿をリツイートした。そしてリツイートテーブルにもきちんとデータが入っていた。しかしtinkerで$fire->retweeted()としてもnullが帰ってきてしまう。なぜか$fire->hasMany(Retweet::class, 'retweeted_id', 'id')ならきちんと狙い通りの結果が帰ってきた。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

m.ts10806

2022/08/10 04:58

提示されているのはdd()の結果でしょうか? こちらもマークダウンのcodeにて提示いただいた方が見やすくなるかと思います(テーブル定義部分も)
TakuMa

2022/08/10 05:28

いや、MySQLから下の部分はtinkerで表示しただけですね。
TakuMa

2022/08/10 05:33

fires +------------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+---------------------+------+-----+---------+----------------+ | id | bigint(20) unsigned | NO | PRI | NULL | auto_increment | | user_id | bigint(20) unsigned | NO | MUL | NULL | | | content | varchar(255) | NO | | NULL | | | created_at | timestamp | YES | | NULL | | | updated_at | timestamp | YES | | NULL | | +------------+---------------------+------+-----+---------+----------------+ retweets +---------------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------+---------------------+------+-----+---------+----------------+ | id | bigint(20) unsigned | NO | PRI | NULL | auto_increment | | retweeted_id | bigint(20) unsigned | NO | MUL | NULL | | | retweeting_id | bigint(20) unsigned | YES | MUL | NULL | | | created_at | timestamp | YES | | NULL | | | updated_at | timestamp | YES | | NULL | | +---------------+---------------------+------+-----+---------+----------------+
m.ts10806

2022/08/10 05:33

なるほど いえ、dd()の結果ぽかっただけで、そこにこだわりがあるわけではなく、あくまでテキストそのままではなく マークダウンで提示してもらった方が見やすくなるので修正してくださいというところを伝えたかったのです。
m.ts10806

2022/08/10 05:34

質問は編集できますし、コメント欄ではマークダウン使えませんので、 本文修正してください。
TakuMa

2022/08/10 05:54

ごめんなさい、やっと意味が分かりました。取り敢えず本文修正しました
m.ts10806

2022/08/10 05:57

いえ、質問初めての方に対してちょっと言い方が遠回し過ぎました。失礼しました。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。