LoginSignup
0
0

More than 1 year has passed since last update.

ランダムで特定のユーザーにかつカラムの値だけを表示(Laravel)

Last updated at Posted at 2021-08-02

プログラミング初心者です。

やりたい事

特定のユーザーのWord Modelの値をランダムに取得したい。

まずはWord Modelの値を取得するにはとやってみた事

調べるとinRandomOrder()使うと出てきたので、まずこのコードを書いてみました。

$word_random = Word::inRandomOrder()->first();

first()はひとつだけ取得し、返り値はインスタンスです。

でもこれだと、WordModelを全て取得してしまいます
wordカラムのだけ表示したいので、カラム指定できるselect()を使いました

$word_random = Word::inRandomOrder()->select('word')->first();

そして表示したいところに

$word_random["word"]

["word"]は連想配列で、ないと、{word:word1}と波括弧とカラム名まで出てきてしまいます
wordがkeyになっているので指定してあげます。

ただModelの値をランダムならここまでの方法でいいと思います。

特定のユーザーへ

かなりコードが変わりますが、結論これになりました。

$word_random = User::find(1)->words->random();

解説

  • User Model同士をWord Modelをリレーションさせました。
  • Word Modelにuserのidを保存するようにしています。
  • User::find(1) idで、該当のUserレコードを取得。
  • User Modelのリレーションに定義したwordsで、該当のWordレコードを取得。
  • random()でWord Modelの値をランダムに返します。
  • 表示したいところには、上記の記載方法で大丈夫でした。

備考

  • wordsはcollection(配列)を返すため、inRandomOrder()だとエラーが出ました。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0