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

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

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

dBASEは、Ashton Tate社が開発したデータベース管理システム (DBMS) です。初期のマイクロコンピュータ向けに開発。広く使用されていました。現在は、RAD環境を取り入れたVisual dBASEとして、米dBASE社が提供しています。

ORM

ORM(オブジェクト関係マッピング)はオブジェクト指向のシステムとリレーショナルデータベースの間でマッピングを行う技術です。

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回答

271閲覧

Laravel5 EloquentでのDBアクセスがうまくいかない

syougosty

総合スコア27

dBASE

dBASEは、Ashton Tate社が開発したデータベース管理システム (DBMS) です。初期のマイクロコンピュータ向けに開発。広く使用されていました。現在は、RAD環境を取り入れたVisual dBASEとして、米dBASE社が提供しています。

ORM

ORM(オブジェクト関係マッピング)はオブジェクト指向のシステムとリレーショナルデータベースの間でマッピングを行う技術です。

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クリップ

投稿2018/11/13 18:23

現在Laravel5 を使ってWebアプリを作成しています。
Eloquentを使ってDBとのやり取りをしているのですが、うまくいかない所があります。

DBから引っ張て来たデータを一覧として画面に表示させていて、その表示されているデータの詳細ボタンを押すと、そのデータの詳細画面が開かれるという処理をさせていたのですが、先ほど急にエラーが出始めました。

処理の内容はこんな感じです。

  • 表示されているそれぞれのデータに付いている詳細ボタンを押すとid検索でそのデータの細かいデータも詳細画面に表示させる。※詳細画面のURLは'details'です。

PHP

1<a href="/bicycleapp/home/details?id={{$item->id}}" class="btn btn-light">詳細</a>
  • ルーティングで詳細画面のURLに接続するとItemControllerにあるdetailsViewアクションを作動させる。

PHP

1//詳細ページ表示 2Route::get('bicycleapp/home/details',('ItemController@detailsView'));
  • ItemControllerの中身。単純にテーブルからidを取得しているだけです。※テーブル名はitemsでモデルクラス名はItemです。

PHP

12 //詳細ページ表示アクション 3 public function detailsView(Request $request){ 4 $id = $request->id; 5 $items = Item::find('id',$id)->get(); 6 return view ('details', ['items' => $items]); 7 } 8}
  • 取得したidをもとに他のフィールドのデータも表示させています。※'details'のページ

PHP

1※表示データは一部省略してます 2if($items != null) 3 @foreach($items as $item) 4 {{$item->name}} 5 {{$item->weigh}} 6 {{$item->model_year}} 7 @endforeach 8 @endif
  • モデルクラスの設定

PHP

1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Item extends Model 8{ 9 protected $guarded = array('id'); 10} 11```  12先ほどまでこのやり方でうまく表示できていたのですが、今表示しようとすると 13![イメージ説明](b16a2feed81b9035846b11d1de4a50ae.png) 14![イメージ説明](d49f6b79ad1baefa50ed0cd4de78d4a8.png) 15このように「指定された型の配列、文字列でなければなりません」的なエラーが出てきます。 16解決策はありますでしょうか? 17また、自分がやろうとしている処理は上記以外にも他にいいやり方があるのでしょうか? 18 19自分では気づかないうちに誤操作でどこかをいじってしまった可能性はあります。

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

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

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

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

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

guest

回答2

0

ベストアンサー

全部修正したいコードだけどエラーの原因としてはこれだけ。

$items = Item::find('id',$id)->get();

$items = Item::find($id);

その他。?id=でもいいけど普通は

php

1Route::get('bicycleapp/home/details/{id}','ItemController@detailsView');
<a href="/bicycleapp/home/details/{{ $item->id }}" class="btn btn-light">詳細</a>

findでid一つ指定なら結果も一つなのでは。

public function detailsView($id){ $item = Item::findOrFail($id); return view ('details', ['item' => $item]); }
{{$item->name}} {{$item->weigh}} {{$item->model_year}}

投稿2018/11/13 23:45

kawax

総合スコア10377

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

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

syougosty

2018/11/14 03:54

解決しましたありがとうございます!詳細ページへの飛び方もkawaxさんの提示の通りシンプルにできるのですね。 勘違いして理解していた所があったので正しく理解することができてよかったです。 もっとちゃんとしたコードが書けるように頑張ります。
guest

0

エラーの解釈間違ってます。
「引数は配列を与えなければなりませんが、文字列が与えられました」です。
実際に型宣言では「array」がつけられていますね。
つまり、その関数では引数には配列が渡されることが期待されているのに、利用される際には文字列が来た
ということになります。
どこで起きているか明示されているのでエラー時に何が渡されたかデバッグ(そこで止めたほうが良いのでvar_dump()よりdd()ですね。)されてみては?

投稿2018/11/13 23:17

m.ts10806

総合スコア80850

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

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

syougosty

2018/11/14 03:48

このエラーの意味を理解できました。ありがとうございます!
m.ts10806

2018/11/14 03:49

デバッグは必ずしてください。 それだけで自己解決できることも多いです
syougosty

2018/11/14 03:55

毎度デバックするよう心がけます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問