Store一覧ページでStoreに紐づくSiteを一覧表示したいのですが、うまくviewにわたってくれません。
こちらがエラー文になります。
Trying to get property 'site_name' of non-object (View:***
多対多のリレーションはできておりStoreからSiteを参照することはできます。
App\Models\Store::find(1)->Sites; App\Models\Site {#3247 id: 1, site_name: "西新宿どっとこむ", site_url: "nishi.com", delete_flg: 1, deleted_at: null, created_at: null, updated_at: null, pivot: Illuminate\Database\Eloquent\Relations\Pivot {#3246 store_id: 1, site_id: 1, }, }, ],
StoreController <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use \App\Models\Store; use \App\Models\Site; class StoreController extends Controller { public function index() { $stores = Store::all(); return view('store/index', ['stores' => $stores]); }
index.blade.php @foreach($stores as $store) <tr> <td>{{ $store->store_name}}</td> <td>{{ $store->store_code}}</td> <td>{{ $store->staff_name}}</td> <td>{{ $store->email}}</td> <td>{{ $store->site->site_name}}</td> ここでエラー(当然ですが・・・ <td>{{ $store->max_cast}}</td> <td></td> <td></td> @endforeach </tr>
Store.php <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Store extends Model { use HasFactory; protected $table = 'stores'; // 店舗に所属する連携サイトを取得 public function sites() { return $this->belongsToMany('App\Models\Site'); } }
site.php <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Site extends Model { use HasFactory; protected $table = 'sites'; protected $fillable = ['site_name', 'site_url']; public function stores() { return $this->belongsToMany('App\Models\Store'); } }
中間テーブルはこのようにデータが入っています。
id | site_id | store_id |
---|---|---|
1 | 1 | 1 |
リレーションができていれば、Store::Allして、viewで{{ $store->site->site_name}}このようにして取得できるという認識でいたのですがどこが間違っているのでしょうか?
稚拙な質問で申し訳ないのですが、ご教示頂けると幸いです。
回答1件
あなたの回答
tips
プレビュー