php - Laravel 将参数传递给它的远距离关系(翻译孩子)
问题描述
我有categories
数据id, parent_id, slug
透视表category_language
,其中列是id,category_id,language_id,value
如您所见,我可以翻译父类别,但无法将所需$lang_id
的翻译发送给孩子,所以每个孩子都在这里翻译是我得到的:
{
"id": 1,
"parent_id": 0,
"slug": "personal-computers",
"created_at": "2019-12-27 15:05:31",
"updated_at": "2019-12-27 15:05:31",
"children": [
{
"id": 3,
"parent_id": 1,
"slug": "accessories-for-pc",
"created_at": "2019-12-27 15:05:32",
"updated_at": "2019-12-27 15:05:32",
"translations": [
{
"id": 1,
"code": "en",
"name": "English",
"pivot": {
"category_id": 3,
"language_id": 1,
"value": "Acc for PC",
"id": 7
}
},
{
"id": 2,
"code": "ru",
"name": "Русский",
"pivot": {
"category_id": 3,
"language_id": 2,
"value": "Аксессуары для ноутбуков и ПК",
"id": 8
}
},
{
"id": 3,
"code": "ro",
"name": "Romana",
"pivot": {
"category_id": 3,
"language_id": 3,
"value": "aksessuari-dlya-noutbukov-i-pk-ro",
"id": 9
}
}
]
}
],
"translations": [
{
"id": 1,
"code": "en",
"name": "English",
"pivot": {
"category_id": 1,
"language_id": 1,
"value": "PC",
"id": 1
}
}
]
}
控制器:
return Category::with('children')
->with(array('translations'=>function($query) use ($lang_id){
$query->where('language_id',$lang_id);
}))
->where('parent_id',0)->first();
模型
class Category extends Model
{ ..
public function translations()
{
return $this->belongsToMany('App\Models\Translation','category_language', 'category_id' ,'language_id' )->withPivot('value','id');
}
public function children()
{
return $this->hasMany( 'App\Models\Category' , 'parent_id' , 'id' )->with('translations');
}
}
解决方案
您可以在子方法中添加条件
public function children()
{
return $this->hasMany( 'App\Models\Category' , 'parent_id' , 'id' )->with('translations')->where('language_id', 1);
}
推荐阅读
- javascript - 如何使用 sinon 更改测试的聚合物组件的 url 查询参数
- wso2 - 无法初始化系统数据源提供程序
- php - 如果颜色变化相同,有没有办法将变化图像复制到另一个?
- c# - 使用发送端口中的 Biztalk WCF-WebHttp 适配器的“PUT”方法调用 Web 服务时出现错误(405)“MethodNotAllowed”
- vue.js - 如何在 vue 应用程序中使用 register-service-worker 进行跳过等待?
- typescript - 回调不编辑值
- struts - Struts1.x 是否兼容 Java11/Java12?
- python - 如何从 QWidget 中删除 QVBoxLayout 或将其转换为 QGridLayout?
- xslt - 如何在xslt中执行java函数
- corda - Corda:如何在交易中传输合同附件?