我想找出一段关系,但我似乎无法解决这个问题。
所以我的脚本首先做的是检查是否存在status = 0的有效会话。
然后我想检查是否存在与该会话关联的status = 0 - > first()的有效试用版。如果是这样,我想获取trial_id相关的所有相关数据。
我明白需要什么逻辑。但是,我想知道是否有一种方法可以使用Eloquent关系尽可能少地执行此操作。
具体来说,一旦我有了$ session对象。我如何过滤试验,以获得适当的stimuli_tracker数据?
表格关系的重要组成部分如下:
会话
试验
Stimuli_Tracker
会话模型
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);
但没有奏效。我尝试了其他一些领域,但我只收到了空。也许我没有得到如何正确抓取内容
答案 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');