前提・実現したいこと
Laravelを使ってWEBアプリを作成中です。
利用者に野菜を選択してもらい、その野菜の分類に応じた画像と注釈を表示するアプリです。
画像は矢印つきで、後付で注釈とPDFへのリンクを入れています。
shape 表示する画像を決定するテーブル
※葉物野菜はA1~A7、根物野菜はB1~B5みたいな設定をしているテーブルがまた別にあります
shape_code(PK) | shape_imageFile |
---|---|
A1 | A1.jpg |
A2 | A2.jpg |
position 画像のどこに説明群を配置するか、画像には何個の説明群が存在するかを決定するテーブル
※A1に配置するN個目の説明文群(A1-N)
position_code(PK) | shape_code | position_top | position_left |
---|---|---|---|
A1-1 | A1 | 100px | 30px |
A1-2 | A1 | 120px | 300px |
A1-3 | A1 | 1px | 300px |
position_symptom 中間テーブル
id(PK) | position_code | symptom_code |
---|---|---|
1 | A1-1 | F001 |
2 | A1-1 | F002 |
3 | A1-2 | F003 |
symptom 説明文テーブル
symptom_code(PK) | text | pdfFile |
---|---|---|
F001 | 葉が虫に食べられる | chugai.pdf |
F002 | 葉が変色する | hensyoku.pdf |
F003 | 虫がいる | mushi.pdf |
もともとはposition_symptomテーブルを作っておらず、
positionテーブル内にコンマ区切りでsymptom_codeを入れていたのですが、
コードがやたらとややこしくなったため、
Laravelのリレーション機能を使うために新たに作成しました。
発生している問題・エラーメッセージ
コントローラーで以下のように書いてみたところ、エラーが発生します。
firstを使っても一緒でした。
php
1$tmp = \App\Models\position::where('shape_code', 'A1')->get(); 2foreach ( $tmp as $val ) { 3 print_r($val->symptoms); 4}
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'symptoms.id' in 'on clause' (SQL: select `symptoms`.*, `position_symptom`.`position_code` as `pivot_position_code`, `position_symptom`.`symptom_code` as `pivot_symptom_code` from `symptoms` inner join `position_symptom` on `symptoms`.`id` = `position_symptom`.`symptom_code` where `position_symptom`.`position_code` is null)
該当のソースコード
App/Models/position.php
php
1<?php 2 3namespace App\Models; 4 5use Illuminate\Database\Eloquent\Model; 6 7class position extends Model 8{ 9 protected $primarykey = 'position_code'; 10 public $incrementing = false; 11 12 public function symptoms() 13 { 14 return $this->belongsToMany('App\Models\symptom', 'position_symptom', 'position_code', 'symptom_code'); 15 } 16 17}
App/Models/symptom.php
php
1<?php 2 3namespace App\Models; 4 5use Illuminate\Database\Eloquent\Model; 6 7class symptom extends Model 8{ 9 protected $primarykey = "symptom_code"; 10 public $incrementing = false; 11 12 public function positions() 13 { 14 return $this->belongsToMany('App\Models\position', 'position_symptom', 'symptom_code', 'position_code'); 15 } 16 17}
試したこと
position_symptomモデルを作ってみたり、pivotを継承してみたりしましたが、何も変わりませんでした。
補足情報(FW/ツールのバージョンなど)
PHP 7.2.3
MariaDB 10.1.31
Laravel 5.6.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/24 04:07