나는 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];
:
$ query-> toSql()을 사용하고 실제 실행중인 쿼리를 확인하십시오. 그러면 문제를 디버그하는 데 도움이됩니다. –
팁 주셔서 감사합니다! – Acla