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

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

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

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

Laravel 5

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

Q&A

解決済

2回答

762閲覧

Laravelで一対多対多のリレーションを組みたい

dauto

総合スコア38

Laravel

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

Laravel 5

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

0グッド

0クリップ

投稿2019/08/03 22:56

編集2019/08/04 04:19

前の質問で提案された一対多対多のリレーションを組みたいのですが、eventテーブルの値が取得できません。
イメージ説明

モデルは以下の通りなのですが、何処を修正すればいいのでしょうか。

Customer.php

php

1<?php 2 3namespace App; 4 5use Laravel\Passport\HasApiTokens; 6use Illuminate\Notifications\Notifiable; 7use Illuminate\Foundation\Auth\User as Authenticatable; 8 9class Customer extends Authenticatable 10{ 11 use HasApiTokens, Notifiable; 12 13 /** 14 * The table associated with the model. 15 * 16 * @var string 17 */ 18 protected $table = 'customer'; 19 20 protected $with = 'point'; 21 22 public function point() 23 { 24 return $this->hasMany('App\Point'); 25 } 26 27 /** 28 * The attributes that are mass assignable. 29 * 30 * @var array 31 */ 32 protected $fillable = [ 33 'name', 'email', 'password', 34 ]; 35 36 /** 37 * The attributes that should be hidden for arrays. 38 * 39 * @var array 40 */ 41 protected $hidden = [ 42 'password', 'remember_token', 43 ]; 44 45 /** 46 * The attributes that should be cast to native types. 47 * 48 * @var array 49 */ 50 protected $casts = [ 51 'email_verified_at' => 'datetime', 52 ]; 53}

Point.php

php

1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Point extends Model 8{ 9 protected $table = 'point'; 10 11 public function customer() 12 { 13 return $this->belongsTo('App\Customer', 'customer_id', 'id'); 14 } 15 16 public function students() 17 { 18 return $this->belongsToMany('App\Event', 'App\Point_Event', 'point_id', 'event_id'); 19 } 20}

Event.php

php

1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Event extends Model 8{ 9 protected $table = 'event'; 10 11 public function courses() 12 { 13 return $this->belongsToMany('App\Point', 'App\Point_event', 'event_id', 'point_id'); 14 } 15}

Point_Event.php(中間モデル)

php

1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Point_Event extends Model 8{ 9 protected $table = 'oint_event'; 10}

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/08/04 01:33

ER図とコードが一致していませんが、これが質問の趣旨なんですか?
退会済みユーザー

退会済みユーザー

2019/08/04 02:10

1対多対多ではなく多対多ではないですか?
m.ts10806

2019/08/04 03:24

前の質問から経緯を説明する必要があるかと。
退会済みユーザー

退会済みユーザー

2019/08/04 03:24

カラム内容考えると、多対多の設計になりますよね・・・
dauto

2019/08/04 04:31

ご返信ありがとうございます。 一対多対多のリレーションを実装したかったのですが、実装方法が分からず、一体多と多対多を組み合わせれば実装できるのではないかと思い、このコードを書きました。
guest

回答2

0

ベストアンサー

設計はこっちの方が妥当だと思います。
「いやいや、これだと作りたいものが作れないんだよ」というような事情があるなら、その理由を提示してください。

イメージ説明

投稿2019/08/04 03:26

編集2019/08/04 03:33
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2019/08/04 12:38

> 一対多対多のリレーションを実装したかったのですが、実装方法が分からず、一体多と多対多を組み合わせれば実装できるのではないかと思い、このコードを書きました。 こうコメントしながら、この回答をベストアンサーにした理由を教えてください。
dauto

2019/08/12 11:00

返信が遅れて申し訳ありません。 元々はコメントの方針で実装していたのですが、その後ベストアンサーにした回答を拝見し、そちらの方針に変更した所実装できた為上記の回答をベストアンサーにさせて頂きました。
guest

0

いきなりテーブル設計をするのではなく、まずはエクセルとかに具体的なデータ(行データ)を非正規化の状態で並べて、正規化しつつどのように分けたら都合が良いか
という手順でやっていった方がいいのでは?

投稿2019/08/04 09:28

mikkame

総合スコア5036

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問