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

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

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

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

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

Eloquent

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

Lumen

PHP Laravel製のマイクロフレームワーク

Q&A

解決済

1回答

592閲覧

Lumen5.6.3で、Eloquentを用いて一対多のデータをJSONで返す方法

ponpu1601

総合スコア166

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

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

Eloquent

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

Lumen

PHP Laravel製のマイクロフレームワーク

0グッド

0クリップ

投稿2018/05/08 15:00

実現したいこと

Lumen5.6.3で、Eloquentを用いて
例えば下記のような一対多の関係を持つModelがあったとして

php

1 2class Company extends Model 3{ 4 protected $table = 'companies' 5 6 public function employees() 7 { 8 return $this->hasMany('App\Employee','employee_id','id'); 9 } 10} 11 12class Employee extends Model 13{ 14 15 protected $table = 'employees' 16 17 public function company() 18 { 19 return this$->belongsTo('App\Company','company_id','id'); 20 } 21} 22

idをキーにしてDBからCompanyを1件取得して
下記のようなJson形式の応答を返したい

json

1[{ 2 "id":3, 3 "name":hogecompany, 4 "employees":[ 5 {"id":1,"name":fuga}, 6 {"id":2,"name":fuga2}, 7 ... 8 ] 9}]

###現状

####現在のControllerのロジック

php

1class CompanyController extends Controller 2{ 3 public function find($id) 4 { 5 $company = Company::with('employees') 6 ->where('id',$id) 7 ->get(); 8 return response()->json($company,200,[],JSON_UNESCAPED_UNICODE); 9 } 10}

####Apiを叩いいたときに帰ってくるJson

json

1[{ 2 "id":3, 3 "name":hogecompany, 4 "employees":[] 5}]

試したこと

####Companyクラスのemployees関数を下記のように変更

php

1 2 public function employees() 3 { 4 return $this->belongsTo('App\Employee','employee_id','id'); 5 }

これだとResponseが下記のようになり、Employeesが1件しか含まれない

json

1[{ 2 "id":3, 3 "name":hogecompany, 4 "employees":{"id":1,"name":fuga} 5}]

###最後に
PHPの初心者でRESTApiをいきなり実装しようとして躓きました。
実際のデータはもう少し複雑なのですが、質問用に簡略化しています。
アドバイスを頂ければと思います。
不足している情報ありましたらご指摘お願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

hasManybelongsToでの外部キーの指定は、以下が正しいのでないでしょうか。

php

1class Company extends Model 2{ 3 protected $table = 'companies' 4 5 public function employees() 6 { 7 return $this->hasMany('App\Employee','company_id','id'); 8 } 9} 10 11class Employee extends Model 12{ 13 14 protected $table = 'employees' 15 16 public function company() 17 { 18 return this$->belongsTo('App\Company','employee_id','id'); 19 } 20}

投稿2018/05/09 00:22

Lulucom

総合スコア1899

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

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

ponpu1601

2018/05/09 02:05 編集

ありがとうございます! 以下のようにすることで求める応答が返ってきました! ```php class Company extends Model { protected $table = 'companies' public function employees() { return $this->hasMany('App\Employee','company_id','id'); } } class Employee extends Model { protected $table = 'employees' public function company() { return this$->belongsTo('App\Company','company_id','id'); } } ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問