2015-11-14 72 views
0

我想弄清楚关系,但我似乎无法解决问题。雄辩:有很多通过关系

那么我的剧本也首先是检查是否存在其中状态= 0

然后我想检查是否有有效的试用一个有效的会话,其中状态= 0 - 第()与该关联>会话。如果是这样,我想抓取trial_id相关的所有相关数据。

我明白需要什么逻辑。但是,我想知道是否有一种方法可以通过尽可能少的命令使用雄辩的关系来完成此操作。

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

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

会议

  • ID(具有一对多的关系,以试验(sessions_id)
  • USER_ID(国外键)
  • 状态

试验

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

Stimuli_Tracker

  • trials_id(外键)
  • 刺激
  • stimulus_type

会话模式

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。也许我没有得到如何正确抓取内容

+0

你可以通过使用连接来实现这一点。我认为没有雄辩的关系就没有办法做到这一点:( –

+0

你在会话模型上应该有什么工作,你有没有得到一个错误或什么? – patricus

+0

是指编辑,我收到任何请求的空值 –

回答

1

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

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

$object->stimuliTracker 

的事情是,这将返回一个雄辩的集合,因为它是一个hasManyThrough关系(hasMany hasMany)。

我假设'刺激'属性属于StimuliTracker类。如果是这样的话,那么你将需要遍历你StimuliTracker收集,提取它:

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

编辑(新增):

如果你只是在寻找中值的数组“刺激'属性,你可以通过list()方法得到:

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

是'stimulus'属于StimuliTracker,但是当我返回$ object-stimuliTracker时,我得到了所有的数据(多行),当我做foreach方法的时候,我得到的只有一行,当我返回$ stimulus时。所有来自$ object-> stimuliTracker –

+0

的数据你在该评论中的第二句话说你得到了“所有数据”,所以我不确定你在问什么 – Trip

+0

如果你要求一个刺激数组属性,那么你会想要使用:$ object-> stimuliTracker-> lists('stimulus'); – Trip