首页 > 解决方案 > 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');
    }
}

标签: phplaravelorm

解决方案


您可以在子方法中添加条件

    public function children()
    {
        return $this->hasMany( 'App\Models\Category' , 'parent_id' , 'id' )->with('translations')->where('language_id', 1);
    }

推荐阅读