Php 雄辩的first()和循环
我是个口才好的新手,在使用循环时遇到了麻烦 假设我在数据库中有一个名为“Jobs”的表,其中包含:Php 雄辩的first()和循环,php,laravel-eloquent,Php,Laravel Eloquent,我是个口才好的新手,在使用循环时遇到了麻烦 假设我在数据库中有一个名为“Jobs”的表,其中包含: Id–1;价值:工程师 Id–2;价值:医生 Id–3;价值观:护士 我还有一个工作翻译表,上面有每个工作翻译。然后,我有一段代码: $jobTranslations = []; $lang = $request->input('lang') ?? 'pt'; foreach(Job::all() as $job) {
- Id–1;价值:工程师
- Id–2;价值:医生
- Id–3;价值观:护士
$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];
当我运行这段代码时,我希望得到一个数组(jobTranslations),其中包含这3个作业以及每个作业的翻译。
但是,我得到了一个包含三项的数组,但它们都是相同的:
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()
在C#中,使用EF,我会执行类似的操作(无需调用get或first):
提前谢谢 我想你要找的是:
$lang = $request->input('lang', 'pt');
$jobTranslations = Job::with([
'jobtranslations' => function ($query) use($lang)
{
$query->where('languageCode', $lang);
}
])->get()->toArray();
return ['translatedJobs' => $jobTranslations];
如果模型设置正确,则无需执行Foreach循环。使用$query->toSql()查看实际运行的查询是什么,这将帮助您调试问题
$lang = $request->input('lang', 'pt');
$jobTranslations = Job::with([
'jobtranslations' => function ($query) use($lang)
{
$query->where('languageCode', $lang);
}
])->get()->toArray();
return ['translatedJobs' => $jobTranslations];