目的:Controllerで、Main::all()に対するリレーションしている値を全件取得したいと考えています。(withメソッドはエラーが出ました。)
やっていること:
①リンク内容コチラを参考に検索機能を作っています。
②hasOneでMainというtable(Model)にTestというtable(Model)、SubTestというtable(Model)をリレーションしています。
③Main::all()の値をviewに渡しforeachで一覧表示しています。その際リレーションしたカラムも取り出せています。(これをController側でもしたいです。)
リレーション自体は↓の様にしたら出来ました。
-MainController.php- public function index(Request $request) { $mains = $this->main->find(1)->tests;//testsはModelでリレーションを定義した関数名です $mains = $this->main->find(1)->subtests;//subtestsはModelでリレーションを定義した関数名です }
今回したいのはこんな感じのことです↓findなどで絞らずにやりたいのでこんな感じに・・・
-MainController.php- public function index(Request $request) { $inputs = $request->all();//viewからの値を$inputsに入れてます。 if ($input['test']) { $posts = $this->main->all()->tests->where('test', 'LIKE', "%$input['test']%")->all(); //mainと紐づいているtestsの中のtestと言うカラムに検索をかけたいと考えています。 }elseif($input['subtest']){ $posts = $this->main->all()->subtests->where('subtest', 'LIKE', "%$input['subtest']%")->all(); }else{ $posts = $this->main->all(); } return view('test.index', compact('posts')); }
やはりこれだとfindがないのでtestsやsubtestsが取れませんでした。
all()以外で全件取得の方法が分からずここで迷走。
試したこと:↓Viewの様にController側でforeachしてリレーションした値を取得しようと思いましたが最初の一つしか取れませんでした(惜しいのかもしれないと考えています。)
-MainController.php- $mainss = $this->main->all(); foreach($mains as $main) { $dd = $main->tests->test; } dd($dd);
よろしくお願いします
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/28 01:13