我正在寻找一种方法来做到以下几点:
假设我们有一个剧院应用程序,我们有三个模型:一方面是Event,Session和Seat,另一方面是Rate.
我们有一个morphToMany关系,因此Rate可以与其他三个模型相关联.
现在,我们希望在每个模型中都有一个rate()关系,它实现了级联模式.如果我们要求Seat实例上的rates(),它将返回其费率,否则,它将检查会话是否有费率并将返回它们.如果没有,它将返回与事件相关的费率.
因此,我们希望定义为层次结构或级联模式来检索速率.
编辑
更多信息:此外,棘手的部分是,例如,一个事件可能有两个费率:一般和青年50美元和30美元.但是一个特定的会话可能会有40美元一般.所以对于这个给定的Session,rates()方法应该返回两个速率:General为40 $,Youth为30 $,因为它没有在Session实例中"覆盖".
如果Session->rates()是 null很容易恢复$this->event->rates(),但不是那么容易的,当我想将此"瀑布"前解释
编辑2
在我第一次接近后,我看到一些奇怪的行为.为了简单起见:我上课了
<?php
namespace App;
use Backpack\CRUD\CrudTrait;
use Backpack\CRUD\ModelTraits\SpatieTranslatable\HasTranslations;
use Illuminate\Database\Eloquent\Model;
class Event extends Model
{
public function rates()
{
return $this->morphToMany('App\Rate', 'assignated_rate', 'assignated_rates', 'assignated_rate_id', 'rate_id')
->withPivot(['price', 'max_on_sale', 'max_per_inscription_set']);
}
}
Run Code Online (Sandbox Code Playgroud)
和
<?php
namespace App;
use Backpack\CRUD\CrudTrait;
use Backpack\CRUD\ModelTraits\SpatieTranslatable\HasTranslations;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Session extends Model
{
public function event()
{
return $this->belongsTo('App\Event');
} …Run Code Online (Sandbox Code Playgroud)