プログラミング初心者です。
やりたい事
特定のユーザーの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()だとエラーが出ました。