私は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)を取得するために期待してい:その後、私はこのコードの部分を持っています。 はしかし、私が代わりに3つの項目の配列を取得しますが、彼らはすべて同じだ:
array([‘id’ => 1, ‘value’ => ‘engineer’, ‘jobtranslations’ => [another array]],
[‘id’ => 1, ‘value’ => ‘engineer’, ‘jobtranslations’ => [another array]],
[‘id’ => 1, ‘value’ => ‘engineer’, ‘jobtranslations’ => [another array]]
);
私は、これは「firstOrFail」に起因する起こっている実現してきましたが、私は理由を理解していません。 $ job-> firstOrFail()は私には分かりません。なぜなら、それはただ一つの仕事(ループの現在の仕事)だからですが、get()を使いたくないからです。事前に
foreach(var job in jobs) {
translatedJobs.Add(job.Include(j => j.jobtranslations.FirstOrDefault(jt => jt.languageCode == lang)));
}
return translatedJobs;
ありがとう:EFを使ってC#で
は、私はこのような何か(getまたは最初に呼び出す必要はありません)を行うと思います!あなたの設定あなたのモデルが正しい場合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