2017-11-04 1 views
1

나는 Eloquent를 처음 사용하고 있으며 루프와 함께 사용할 때 문제가 있습니다.Eloquent first() and loops

것은 내가 함께 '채용 정보'라는 내 DB의 테이블이 상상 :

  • 아이디 - 1; 가치 : 엔지니어
  • Id - 2; 가치 : 의사
  • Id - 3; 가치 : 간호사

각 작업 번역이있는 JobTranslations 테이블도 있습니다.

 $jobTranslations = []; 

     $lang = $request->input('lang') ?? 'pt'; 
     foreach(Job::all() as $job) { 
      $job = $job->with(['jobtranslations' => function($query) use ($lang) { 
       $query->where('languageCode', $lang); 
      }])->firstOrFail(); 
      $jobTranslations[] = $job; 
}   
     return ['translatedJobs' => $jobTranslations]; 

이 코드를 실행하면, 나는 그 3 그 안에 작업과 각 작업의 번역과 배열 (jobTranslations)을 얻을 것으로 기대 해요 : 그럼,이 코드 조각이있다. 그러나, 내가 대신 세 가지 항목 배열을 얻을 수 있지만, 그들은 모두 같은 것 :이 때문에 'firstOrFail'에 무슨 일이 일어나고 깨달았다하지만 난 왜 이해가 안

array([‘id’ => 1, ‘value’ => ‘engineer’, ‘jobtranslations’ => [another array]], 
     [‘id’ => 1, ‘value’ => ‘engineer’, ‘jobtranslations’ => [another array]], 
     [‘id’ => 1, ‘value’ => ‘engineer’, ‘jobtranslations’ => [another array]] 
); 

. $ job-> firstOrFail()은 단지 하나의 작업 (루프의 현재 작업)이기 때문에 나에게 이해가되지 않지만 get()도 사용하고 싶지 않기 때문에 나에게 의미가 없습니다. 사전에

foreach(var job in jobs) { 
translatedJobs.Add(job.Include(j => j.jobtranslations.FirstOrDefault(jt => jt.languageCode == lang))); 
} 

return translatedJobs; 

감사 : EF를 사용하여 C#에서

는,이 같은 (얻거나 처음 호출 할 필요를) 할 것! 당신이 설정하여 모델이 올 경우 Foreach 루프를 할 필요가 없습니다

$lang = $request->input('lang', 'pt'); 

$jobTranslations = Job::with([ 
    'jobtranslations' => function ($query) use($lang) 
    { 
     $query->where('languageCode', $lang); 
    } 
])->get()->toArray(); 

return ['translatedJobs' => $jobTranslations]; 

:

+1

$ query-> toSql()을 사용하고 실제 실행중인 쿼리를 확인하십시오. 그러면 문제를 디버그하는 데 도움이됩니다. –

+0

팁 주셔서 감사합니다! – Acla

답변

1

난 당신이 경악을 찾고 싶었어 무엇 assum.