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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Eloquent

Eloquentとは、PHPフレームワークのLaravelに最初から含まれているORM(Object-relational mapping:オブジェクト関係マッピング)です。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

8692閲覧

Laravel5- 動的スコープの呼び出しについて

potemaru

総合スコア13

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Eloquent

Eloquentとは、PHPフレームワークのLaravelに最初から含まれているORM(Object-relational mapping:オブジェクト関係マッピング)です。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2017/02/22 02:48

編集2017/02/23 04:50

お世話になります。
今回、Eloquentを利用して、データベースからselectしてきた値をviewに表示させるプログラムを書きたいと思っています。

入力されたデータをスコープの定義にあてはめたいのですが、
スコープパラメータの部分でエラーが起きてしまいます。
エラー内容:Type error: Too few arguments to function

こういった場合、パラメータはどういった記載にすれば良いのでしょうか。

こちらがコントローラーです

PHP

1namespace App\Http\Controllers; 2 3use App\DBconnect; 4use App\Http\Controllers\FormController; 5use Illuminate\Support\Facades\Request; 6 7 8class FormController extends Controller 9{ 10 11 //検索 12 public function delete_search(Request $request) 13 { 14 $this->validate($request,[ 15 'number' => 'required' , 16 'address' => 'required', 17 ]); 18 $data = $request->all(); 19 20 $result = DBconnect::Search()->get(); 21 22 return view('sqlconnect/delete_check', compact('result')); 23 } 24

こちらがmodel

php

1namespace App; 2 3use Illuminate\Database\Eloquent\Scope; 4use Illuminate\Database\Eloquent\Model; 5use App\DBconnect; 6use App\User; 7 8class DBconnect extends Model 9{ 10 protected $table = 'addresses'; 11 public $timestamps = false; 12 13 public function scopeSearch($query, $data) 14 { 15 return $query->select('number', 'address') 16 ->where('number','like',$data['number'].'%') 17 ->where('address', 'like','%'.$data['address'].'%'); 18 } 19} 20

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

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

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

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

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

guest

回答2

0

public function delete_search(Request $request)
{
$this->validate($request,[
'number' => 'required' ,
'address' => 'required',
]);
$data = $request->all();

$result = DBconnect::Search($data)->get(); //エラの原因:Search()になっていただけでした(・_・;) return view('sqlconnect/delete_check', compact('result')); }

投稿2017/02/23 05:07

potemaru

総合スコア13

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

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

0

ベストアンサー

色々と改善点がありそうなので、書いていってみます。

①numberやAddressの入力チェックはValidateを活用しましょう。
②Modelには適切な名称をつけましょう。Modelのクラス名を"Address"とすることで余計な記述が不要になります。
③ここは好み次第かもしれませんが、whereもいっその事、Controllerにまとめてはどうでしょうか。もし、頻繁に使うのであれば、scopeXXXXXとしてModelに書くのも良いですね。

というわけで、まとめるとこんな感じにできると思います。
Controller

php

1<?php 2 3namespace App\Http\Controllers\Test; 4 5use Illuminate\Http\Request; 6use App\Http\Controllers\Controller; 7use App\Address; 8 9class testController extends Controller 10{ 11 /** 12 * 情報を検索する 13 * @param Request $request 14 */ 15 public function delete_search(Request $request){ 16 //入力チェックはValiadationを使いましょう。 17 //ここで入力チェック 18 $this->validate($request,[ 19 'number' => 'required' , 20 'address' => 'required', 21 ]); 22 //$dataにリクエストの内容を設定する。 23 $data = $request->all(); 24 //Validationに問題がなければ、情報を検索する 25 $result = Address::select('number', 'address') 26 ->where('number','like',$data['number'].'%') 27 ->where('address', 'like','%'.$data['address'].'%') 28 ->get(); 29 return view('testView/test', compact('result')); 30 } 31}

Model(これはartisan make:model Addressesしただけ

php

1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Address extends Model 8{ 9 // 10}

おまけのViewサンプル(bootstrap利用)

php

1@extends('layouts.app') 2 3@section('content') 4<div class="container"> 5 <div class="form-group"> 6 <!-- エラーメッセージはここにでてくる --> 7 @if (count($errors) > 0) 8 <div class="alert alert-danger"> 9 <ul> 10 @foreach ($errors->all() as $error) 11 <li>{{ $error }}</li> 12 @endforeach 13 </ul> 14 </div> 15 @endif 16 </div> 17 <div class="row"> 18 <div class="col-md-8 col-md-offset-2"> 19 <div class="panel panel-default"> 20 <form method="POST" action="/testProject/public/search"> 21 <input type="hidden" name="_token" value="{{ csrf_token() }}"> 22 <input type="text" name="number"> 23 <input type="text" name="address"> 24 <input type="submit"> 25 </form> 26 </div> 27 @if (count($result) > 0) 28 <table class="table table-bordered table-striped table-hover"> 29 <thead> 30 <th>number</th> 31 <th>Address</th> 32 </thead> 33 <tbody> 34 @foreach($result as $value) 35 <tr> 36 <td>{{$value->number}}</td> 37 <td>{{$value->address}}</td> 38 </tr> 39 @endforeach 40 </tbody> 41 </table> 42 @endif 43 </div> 44 </div> 45</div> 46@endsection

投稿2017/02/23 02:24

motuo

総合スコア3027

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

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

potemaru

2017/02/23 04:54

ご回答ありがとうございます。m(__)m まさに私が実現したいのはスコープを使用した方法であることが分かりました。 そこでソースコードをスコープ用に書き直してみたのですが、スコープパラメータでエラーが起きてしまいます。もしお分かりになったら見て頂けると幸いですm(__)m
potemaru

2017/02/23 04:59

ごめんなさい、上記のコメントの件はわたくしの凡ミスが原因であることが分かりましたので、解決しました。このたびは質問以外の件でもご指摘いただいてありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問