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

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

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

339閲覧

commentテーブルのuser_idからuserテーブルのnameは取得できるか

katahaba

総合スコア15

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2018/09/05 07:47

イメージ説明

図のcommentsテーブルに入っているuser_idを利用して、元のuserテーブルにあるuserのnameは取得できるでしょうか?
特にforeign-keyとしては指定していません。 userのidとuser_idは一致しています。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

特にforeign-keyとしては指定していません。

指定しましょう。

userのidとuser_idは一致しています。

それは思い込みです。
人間はミスをします。だから仕組みで解決することが必要です。
データの整合性はRDBに保証してもらうべきです。

一般的にはcommentはuserからみて1対多、micropostからみても1対多のモデルになります。

現状、userとcommentのリレーション定義を行っていないので以下の設定を追加します。

User.php

public function comments() { return hasMany('App\Comment'); }

Comment.php

public function user() { return belongsTo('App\User'); }

あるいはuserとmicropostsの多対多の中間モデルとして定義しても良いでしょう。

マイグレーションファイルも外部キー設定を行います。
ちゃんとリレーション定義を行えば参照は簡単なので横着は禁物です。

投稿2018/09/05 08:31

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

こういうこと?
(例なのでcommentsテーブルのidで特定するようにしています。)

SQL

1select u.name 2 from users u, 3 comments c 4 where u.id = c.user_id 5 and c.id = '投稿ID'

問題なく取れるとは思いますが、micropostテーブル挟んでるので条件等に追加したほうがよいとは思います。

あぁ、phpですね。。。
comments⇒micropost⇒usersと見ていけば取れると思いますよ。

投稿2018/09/05 08:20

編集2018/09/05 08:23
yukihisa

総合スコア672

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

katahaba

2018/09/05 08:27

ありがとうございます。やって見ます。
退会済みユーザー

退会済みユーザー

2018/09/05 08:34

> comments⇒micropost⇒users これではmicropostの投稿主が取得されますよ。 取得したいのはcommentの投稿主ではないですか?
yukihisa

2018/09/05 08:46 編集

む、micropost⇒画像 comments⇒文章でmicropostには文章を保持するカラムがなかったのでテーブルは分かれていても投稿者は同じかな(micropostは画像用、commentsは画像タイトル)、と考えていたのですが micropost⇒画像投稿 comments⇒それに対するリプライという形なのですか? それなら確かにmicropost入れちゃうとよろしくないですね。
退会済みユーザー

退会済みユーザー

2018/09/05 08:53 編集

> comments⇒それに対するリプライという形なのですか? そのように認識していましたがそうではないという可能性もあるということですね。 質問者さんに聞かないとわからなさそうです。 私としては自分でテーブル結合クエリを書くくらいなら素直にuserとcommentのリレーションを定義すべきと思っています。 正規化の恩恵を享受できるメリットもあります。
退会済みユーザー

退会済みユーザー

2018/09/05 08:57

yukihisaさんの説で正しければそもそもcommentにuser_id要らないですね。
yukihisa

2018/09/05 09:08 編集

あー、確かにそうですね・・・完全に無駄カラムになっちゃいますね。 なるほど、Ruby on Railsチュートリアルに記載されていましたが、micropostsは「短文投稿」のような意味合いなのですね。 個人でやる分にはきっちりかっちりやるのに大賛成です。 ただ最近、人数の多いプロジェクトとかだとDBに理解が浅い人間が多いせいかリレーションを貼るよりシステム側で制御させる、といった案件がよくあります。 僕も個人的にはテーブル定義からきっちりやりたいですが、メンテナンス性を考えると難しいな、と思うことが増えてきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問