IT関連

Laravel DBクラスのSQLで1件だけ取り出したい場合

投稿日:2018年9月14日 更新日:

Laravelを使いだして、はや数ヶ月たらず。

 

青本を勉強して、MVCモデルにのっとり、モデルでテーブルを定義して、コントローラーでモデルを呼び出し、そのテーブル情報をビューに受け渡しつつ呼び出している。

 

まさに教則本通り。

 

値を取り出すときは、ビューで

こんな形でBladeに埋め込んでいる。

 

それはいいのだけど、このテーブル情報って1件だけ取り出した場合ってどうするの?って思った。

 

ちなみにテーブルの取り出し方はDBクラスクエリビルダEloquentの3つ方法があると青本に書いてあったけど、私はややこしいSQL文ばっかり書いているので、クエリビルダやEloquentはあまり使っていない。

 

なので、first()とかほとんど使ったことがないのだ。

 

例えばこんなテーブルがあったとする。テーブル名はUDON。

商品(NAME) 金額(PRICE)
天ぷらうどん 430
きつねうどん 460
うどん定食 550
から揚げ定食 550
カレーうどん 450

 

例えば、一番上の「天ぷらうどん」だけをwhereで指定した場合。

 

このUDONテーブルで、WHERE文で指定している以上、どうあがいても1行しか引っ張らない。

 

なので、foreachなんか使わずに連想配列っぽく

で取り出せるかと思ってやってみたら、PRICEって何ぞ?(Undefined)のエラー

 

あれ?こうだったか?と思ってやってみたら

Trying to get property ‘PRICE’ of non-objectとエラーが。

 

あれ・・。どうやって取り出すのよ。

 

まさか、冒頭に書いたように、こんな風に取り出すの?と思ってやってみたら、

 

でた。天ぷらうどん430円、まいどありがとうございます。でもこんなのでいいのかい?

物は試しにこうやってみた。どうせ1行しかないので、$dataに入れれば後からでも取り出せるでしょ。

これも動く

 

なんだよこれ。ネットで調べてみたところ、

1件に確定できる条件をつけたのであれば、最初から1件だけを取得してください。

だそうです。

 

やり方は、

やっぱりこんな感じでfirst()で絞るそうだ。ふんふん。

 

早速やってみた。

これはモデルを使ったEloquentです。

 

すると@foreachなんかつけなくても、

 

2つとも出た!なんだこりゃ。上はオブジェクトとして、下は連想配列として取得しようとしているのに、なんでどっちも取り出せるんだ?Eloquent不思議だなぁ。

 

PHPの基礎がおぼつかない私にとって謎だらけ。気になるので、print_r($TABLE)で中を見てみる。

 

Eloquentはこんな感じ。1行だけなのにめちゃ多い。しかもめっちゃ謎!

 

次にDBクラスのSQL使用の場合をやってみた。こんどはたったこれだけ。シンプルそうに見えてダメなんだよな。なんだこれ。

 

念のためクエリビルダを使ってみた。スッキリ爽快。さらにシンプルになった。

 

試しにこのクエリビルダのやつを、Viewで表示してみたら。これは出た。

でも、連想配列で取り出そうとしたら怒られてしまった

 

 

まとめたらこうなりました。

取り出し方 DBクラス(SQL) クエリビルダ Eloquent
{{$TABLE[‘PRICE’]}} × ×
{{$TABLE->PRICE}} ×

 

 

私の場合は、ややこしいSQL文を書くことが多いので、DBクラスばかり使っているのだが、こまったなぁ・・・。

 

DBクラスもこんな感じで最後に->first();とか書けたらいいのだが。関係ないか。そもそも構造が違うんだから。

 

 

これはさっき表示したDBクラスで得た中身なんだけど、よく見るとArrayに入ってますよね。Arrayの0。そこからObjectになってる。

 

ということは、

これでいけんじゃね?と思ってやってみたら、

 

見事成功。

 

なんか力技のような気がするんだけど、これしか方法がないよね。

他にやり方があったら教えてほしいです。

スポンサーリンク




スポンサーリンク




-IT関連
-, , ,

執筆者:


comment

Your email address will not be published. Required fields are marked *

関連記事

Git SourceTreeでファイル名の大文字・小文字を検知

SourceTreeでGitを使っていて、ソースはもちろんのことファイル名を変更したときでも、変更を検知してくれるのだが、ファイル名の小文字を一部大文字にしただけでは検知されなかったので備忘録。 &n …

AS400/IBMi View(ビュー)を作成したり削除したり一覧表示する

素人の備忘録なので、あまりよく解っていませんが、ビューの作り方です。 なんでViewを作る必要があるのかすら不明です。知ってる人は逆にコメント欲しいです。   思っていることは、論理ファイル …

AS400/IBMi 論理ファイルでJOINしても結合した側のカラムは主キーにできない

もう表題で話は完結しているのだが、AS400(IBM i)でJOINをした対象のファイルのカラムを主キーにして論理ファイルを作ろうと試行錯誤をしたが、結局できなかったという話。   IBMの …

AS400/IBMi 無料でWeb化 GUI化 オープン化 Linuxサーバ構築編 2/3

1/3でグダグダと説明してまいりましたが、構築作業の事前準備として2/3を設けました。   さっそく初めて行きます。   準備するもの Linux用Access_Client_So …

WordPressで使ってる意味不明なもの

今実行しているコードのファイル名を取得

index.phpなら、c:\xampp\htdocs\index.phpとなる。 &nbsp …

Adsense広告




文字で検索

人気記事

なぜだか人気記事

読んでほしい順に