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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

1回答

679閲覧

Laravel whereNullで「Method whereNull does not exist.」というエラー

mikeko0901

総合スコア227

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2020/02/29 03:18

いつもありがとうございます。

Laravelで、猫の写真を登録する機能を使っています。
view側で写真を登録する際に、ユーザーidが空の写真を表示するのに、whereNullを記載すると、
Method whereNull does not exist.というエラーが出ます。
イメージ説明

以下、Controllerです。

CatsController 特定の猫で、かつ、user_idが空のものを取得したいです

namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Cat; // Cats情報の取得 use Storage; // 画像アップで追加してみた use App\Photo; // Photo機能で追加 use App\User; use Intervention\Image\ImageManagerStatic as Image; class CatsController extends Controller { public function show($id) { $cat = Cat::find($id); $photo = Photo::all()->where('cat_id', $id)->whereNull('user_id'); $applied = $cat->applied()->get(); $data = [ 'cat' => $cat, 'applieds' => $applied, 'photos' => $photo, ]; return view('admin.catshow', $data); }

whereNullだとうまくいかないのですが、

$photo = Photo::all()->where('cat_id', $id)->where('user_id', '');

とやるとうまく行きました。
ただなぜwhereNullでエラーが出てしまうのかお分かりになりましたら教えていただけると嬉しいです。

※ちなみに、別のところで、『空じゃないものを取得する』ということがやりたく、whereNotNullはうまくできました・・・
PhotosController 写真一覧ページでは、逆にuser_idが空でないものを取得する。こちらはエラーも出ずに成功。

namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Cat; // Cats情報の取得 use Storage; // 画像アップで追加してみた use App\Photo; use App\User; use Intervention\Image\ImageManagerStatic as Image; class PhotosController extends Controller { public function adminphotoindex() { $photos = Photo::whereNotNull('user_id')->orderBy('created_at', 'desc')->paginate(30); return view('admin.photo', [ 'photos' => $photos ]);

よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

コレクションにはwhereNullメソッドが存在しないからです。

Photo::all()でコレクションインスタンスが取得できます。コレクションにはwhereメソッドはありますが、whereNullメソッドはありません。

なのでall()で取得する前に、
Photo::whereNull(〜)->where(〜)->get()
などとするととれるのではないでしょうか。

スマホからなので、コードが雑ですみません。

以下参考サイト(laravelのversionは適切なものを選択してください。)
コレクション
クエリビルダ

投稿2020/02/29 03:36

編集2020/02/29 03:59
hayato7

総合スコア1135

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

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

mikeko0901

2020/02/29 05:41

$photo = Photo::whereNull('user_id')->where('cat_id', $id)->get(); でできました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問