雄辩:通过关系有很多

时间:2015-11-14 19:17:46

标签: php laravel eloquent

我想找出一段关系,但我似乎无法解决这个问题。

所以我的脚本首先做的是检查是否存在status = 0的有效会话。

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

我明白需要什么逻辑。但是,我想知道是否有一种方法可以使用Eloquent关系尽可能少地执行此操作。

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

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

会话

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

试验

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

Stimuli_Tracker

  • trials_id(外键)
  • 刺激
  • stimulus_type

会话模型

SELECT w.*,s.Name AS 'Store', j.name as 'job' from worker w
inner join store s on worker.Store_idStore = store.idStore
Inner join job J on worker.job_idjob = job.idjob

试验模型:

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);

但没有奏效。我尝试了其他一些领域,但我只收到了空。也许我没有得到如何正确抓取内容

1 个答案:

答案 0 :(得分:1)

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

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

$object->stimuliTracker

问题是这会返回一个Eloquent Collection,因为它是一个hasManyThrough关系(hasMany是一个hasMany)。

我假设'刺激'属性属于StimuliTracker类。如果是这种情况,那么您将需要遍历您的StimuliTracker Collection来提取它:

foreach ( $object->stimuliTracker as $record )
{
    $stimulus = $record->stimulus;
    // do something with $stimulus
}
编辑(已添加):

如果你只是在寻找刺激物中的一系列价值观。属性,你可以用lists()方法得到它:

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