希望在Eloquent模型中实现数据透视表关系,但我不确定它是否可行。
为了说明,假设我们有一个系统可以跟踪哪些电影正在哪些影院上映。还假设剧院可以享受促销折扣以降低门票价格。一些折扣可能有限制(最低票价或只有G等电影),折扣可能是也可能不是可以组合。
数据库结构:
movies (id, title...)
theaters (id, name,...)
discounts (id, theater_id, discount_amount, min_price, can_combine)
theater_movies (id, movie_id, theater_id, ticket_price)
movie_discounts (id, movie_id, discount_id)
Laravel Theater电影模型
class TheaterMovie extends Model
{
public function discounts()
return $this->hasManyThrough(
Discount::class,
MovieDiscount::class,
'movie_id', // Foreign key on movie_discounts table...
'id', // Foreign key on discounts table...
'movie_id', // Local key on theater_movies table...
'discount_id' // Local key on movie_discounts table...
)
}
但这不是捕捉theater_movies.theater_id = discounts.theater_id关系,理想情况下也会检查ticket_price with min_price。
答案 0 :(得分:0)
我认为在剧院和电影模型上使用简单的关系可能更容易,而不是试图引入TheaterMovie课程。
例如,在剧院课上,你会像这样关注电影:
public function movies()
{
return $this->belongsToMany("App\Movie")->orderBy('name');
}
然后为了得到你的支点,你可以做一个类似的关系,但在剧院模型上添加枢轴:
public function discounts()
{
return $this->belongsToMany("App\Discount")->withPivot('discount_amount', 'min_price', 'can_combine')->orderBy('name');
}
从这里开始,当您从剧院模型中调用关系时,您可以像这样使用枢轴:
$theater->pivot->discount_amount;
等等。如果您愿意,可以在电影桌上放置类似(甚至相同)的折扣关系,这样您就可以从其他相关模型中获取信息。