laravel - 如何为 Laravel 中的多语言帖子分配多语言类别
问题描述
我正在开发一个博客项目,其中管理员可以添加两种或多种语言的帖子,并且这些帖子包含在管理员也可以添加两种或多种语言的类别中(多语言网站)。
所以我的数据库类似于:类别表:id | translation_lang | trnaslation_of | name | slug | created_at | upadated_at
帖子表:id | translation_lang | trnaslation_of |title | body | created_at | updated_at
,
post_category:id | post_id | category_id
帖子和类别之间的关系是多对多的。岗位型号:
public function categories(){
return $this->belongsToMany(Category::class, 'post_category');
}
//accessing posts translations
public function posts(){
return $this->hasMany(self::class,'translation_of');
}
类别型号:
public function posts(){
return $this->belongsToMany(Post::class, 'post_category');
}
//accessing categories translations
public function categories(){
return $this->hasMany(self::class,'translation_of');
}
以及在 PostsController 中添加新帖子的方法:
$posts = collect($request->post);
$filter = $posts->filter(function($value, $key){
//get_defalult_lang() is custom helper method to get app default language
return $value['abbr'] == get_default_lang();
});
$default_post = array_values($filter->all()) [0];
DB::beginTransaction();
$default_post_id = Post::insertGetId([
'translation_lang'=> $default_post['translation_lang'],
'translation_of' => 0,
'title' => $default_post['title'],
'slug' =>str_replace(' ', '_', $default_post['title'] ),
'body'=>$default_post['body'],
'user_id'=>Auth::user()->id,
]);
$post = Post::find($default_post_id);
$post->categories()->syncWithoutDetaching($request->categoriesIds);
$posts_in_other_langs = $posts->filter(function($value, $key){
return $value['abbr'] != get_default_lang();
});
if (isset($posts_in_other_langs) && $posts_in_other_langs->count()) {
$posts_arr = [];
foreach($posts_in_other_langs as $post_in_other_lang) {
$posts_arr[] = [
'translation_lang'=> $post_in_other_lang['translation_lang'],
'translation_of' => $default_post_id,
'title' => $post_in_other_lang['title'],
'slug' =>str_replace(' ', '_', $post_in_other_lang['title'] ),
'body'=>$post_in_other_lang['''],
'user_id'=>Auth::user()->id,
];
}
Post::Insert($posts_arr);
}
DB::commit();
现在的问题是,当我添加新帖子时,laravel 只会将默认语言类别分配给默认语言帖子,并且不会为翻译分配任何内容,这意味着当用户切换网站语言时,他/她将不会在帖子上获得任何类别因为它们不是从第一手开始分配给其他语言的帖子(翻译),而实际需要的是根据transltion_lang
, 和transltion_of
表将每个帖子的翻译分配给每个类别的翻译。
我希望我能很好地实现我的想法,也希望能找到帮助。
解决方案
推荐阅读
- c++ - 将成员带出临时位置时删除复制/移动
- ms-access - 使用 OpenArgs 将多个文本框传递到不同的表单中
- python - 使用 keras 的不同时间步长的循环神经网络
- sql - SQL Server 中的合并列
- python - 如何通过 Selenium 和 Python 为 GeckoDriver 配置日志级别和日志位置?
- memory-address - 从虚拟地址计算真实地址
- json - Swift - “实例成员不能用于类型”错误的简单修复?
- spring-boot - 如何使用 fabric8 maven 插件从环境变量中指定 spring.profiles.active 参数?
- c# - 在一段时间后使函数超时并重试的最佳方法
- swift - NSLocalizedString 无法识别 Localizable.strings 字符串