前提・実現したいこと
laravelの5系でシステム開発をしています。
多対多のリレーションで中間テーブルがソフトデリートされてもデータが取得されています。
中間テーブルが削除されている場合にデータを取得しないようにしたいです。
中間テーブルのレコードが削除されているものは取ってこないようにできないでしょうか?
- stores
id | name | deleted_at |
---|---|---|
1 | hoge | null |
2 | fuga | null |
- courses_stores
id | store_id | course_id | deleted_at |
---|---|---|---|
1 | 1 | 1 | null |
2 | 1 | 2 | 2018-05-05 |
2 | 2 | 1 | null |
2 | 2 | 2 | null |
- courses
id | name | deleted_at |
---|---|---|
1 | hogera | null |
2 | fugafuga | null |
該当のソースコード
上記のテーブルを使って
$store = Stores::find(1)->StoreCourses;
をするとレコードが2件取れます。
期待値はhogeraのレコード1件のみ取得。
もろもろすっとばしていますが・・・(;´∀`)
よろしくお願いします。
下記、モデル情報です。
stores
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Stores extends Model { use SoftDeletes; /** * モデルと関連しているテーブル * * @var string */ protected $table = 'stores'; /** * 日付のデータ型でFormatを利用するカラムを指定 */ protected $dates = [ 'created_at', 'updated_at', 'deleted_at' ]; /** * コース情報とのリレーション * @return type */ public function storeCourses() { return $this->belongsToMany(StoreCourses::class, 'courses_stores', 'store_id', 'course_id'); } }
courses_stores
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class CoursesStores extends Model { use SoftDeletes; /** * モデルと関連しているテーブル * * @var string */ protected $table = 'courses_stores'; /** * 日付のデータ型でFormatを利用するカラムを指定 */ protected $dates = [ 'created_at', 'updated_at', 'deleted_at' ]; }
courses
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Courses extends Model { use SoftDeletes; /** * モデルと関連しているテーブル * * @var string */ protected $table = 'courses'; /** * 日付のデータ型でFormatを利用するカラムを指定 */ protected $dates = [ 'created_at', 'updated_at', 'deleted_at' ]; /** * 店舗情報とのリレーション * @return type */ public function stores() { return $this->belongsToMany(Stores::class, 'courses_stores', 'course_id', 'store_id'); } }
回答2件
あなたの回答
tips
プレビュー