如果关系不存在,Laravel会获得与默认值的Eloquent关系吗?

时间:2017-06-02 09:15:22

标签: php mysql laravel eloquent relational-database

我有一个Post模型,每个帖子都有很多翻译,例如:rufren - (post_translations表),工作获取具有特定翻译的所有帖子的代码如下(例如fr):

 $locale = 'fr';
 $posts = Post::with([
        'translations' => function($q) use($locale){
            $q->where('language', $locale);
        }
    ])->get();

但有些$posts没有fr翻译,所有帖子都有en翻译。

我希望获得fr翻译的所有帖子以及没有fr的帖子,返回en翻译!

我必须手动执行此操作吗? E.I.循环播放所有帖子并将en翻译添加到没有fr的帖子或者有一个laravel方式来执行此操作?

2 个答案:

答案 0 :(得分:1)

尝试使用此解决方案获取所有fr:

$posts = Post::whereHas('translations', function($q) use($locale){
    $q->where('language', $locale);
})->get();

希望有所帮助:)

答案 1 :(得分:1)

根据你所写的内容,我理解帖子总是用英文写成,然后翻译成其他语言。

我不知道你有什么用处,但我建议你用法语和英语翻译查询所有帖子,然后在打印时过滤它们

$locale = 'fr';
$posts = Post::with([
    'translations' => function($q) use($locale){
        $q->where('language', $locale);
        $q->orWhere('language', 'en');
    }
])->get();