繁体   English   中英

雄辩的:有很多直通的关系

[英]Eloquent: Has Many Through Relationships

我试图找出一种关系,但似乎无法解决问题。

因此,我的脚本首先要做的是检查状态为0的会话是否有效。

然后,我想检查是否存在与该会话关联的状态为0-> first()的有效试用版。 如果是这样,我想获取与trial_id相关的所有相关数据。

我了解需要什么逻辑。 但是,我想知道是否有一种方法可以使用雄辩的关系使用尽可能少的命令来执行此操作。

具体来说,一旦我有了$ session对象。 我如何过滤试验以获取适当的stimuli_tracker数据?

该表的关系的重要组成部分如下:

届会

  • id (与试验(sessions_id)具有一对多关系
  • user_id(外键)
  • 状态

试用版

  • id(与stimuli_tracker一对多的关系)
  • sessions_id(外键)
  • 状态

Stimuli_Tracker

  • trial_id(外键)
  • 刺激
  • 刺激类型

会话模型

class Sessions extends Model
{
    protected $table = 'sessions';



    public function stimuliTracker()
    {
        return $this->hasManyThrough('App\StimuliTracker', 'App\Trials', 'sessions_id','trials_id');
    }
}

试用型号:

class Trials extends Model
{
    public function stimuli()
    {
       return $this->hasMany(App\StimuliTracker);
    }
}

编辑

我曾尝试过手工艺修补匠

$object = \App\Session::where(arg);

然后我试图

$object->stimulus

但是没有用 我尝试了其他一些字段,但只收到null。 也许我没怎么正确地获取内容

$ object-> stimulus是未定义的属性,基于您在代码中显示的内容。

要访问会话的刺激信息,您必须使用关系的名称,在这种情况下,该名称是:

$object->stimuliTracker

事实是,这将返回一个Eloquent Collection,因为它是hasManyThrough关系(这是hasMany中的hasMany)。

我假设'stimulus'属性属于StimuliTracker类。 如果是这种情况,那么您将需要遍历StimuliTracker集合以提取它:

foreach ( $object->stimuliTracker as $record )
{
    $stimulus = $record->stimulus;
    // do something with $stimulus
}

编辑(添加):

如果您只是在'stimulus'属性中寻找值的数组,则可以使用lists()方法获得它:

$stimulus_values = $object->stimuliTracker->lists('stimulus');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM