首页 > 解决方案 > Laravel Eloquent 与翻译的多对多关系

问题描述

我对多对多关系和术语的翻译有疑问。我有 4 张桌子:

products
    - id, price, whatever
products_lang
    - id, product_id, lang, product_name
accessori
    - id, active
accessori_lang
    - id, accessori_id, lang, accessori_name

我正在尝试将配件分配给具有名为的中间表的产品:

accessori_products

这是产品的模型:

class Product extends Model {

    protected $table = 'products';

    public function productsLang () {
        return $this->hasMany('App\ProductLng', 'products_id')->where('lang','=',App::getLocale());
    }

    public function productsLangAll() {
        return $this->hasMany('App\ProductLng', 'products_id');
    }

    public function accessori() {
        return $this->belongsToMany('App\Accessori', 'accessori_products');
    }
}

这是 productLng 的模型:

class ProductLng extends Model {

    protected $table = 'products_lng';

    public function products() {
        return $this->belongsTo('App\Product', 'products_id', 'id');
    }
}

然后我有 Accessori 的模型:

class Accessori extends Model {

    protected $table = 'accessori';

    public function accessoriLang() {
        return $this->hasMany('App\AccessoriLng')->where('lang','=',App::getLocale());
    }

    public function accessoriLangAll() {
        return $this->hasMany('App\AccessoriLng');
    }

    public function accessoriProducts() {
        return $this->belongsToMany('App\Products', 'accessori_products', 'accessori_id', 'products_id');
    }
}

AccessoriLng 的模型:

class accessoriLng extends Model {

    protected $table = 'accessori_lng';

    public function accessori() {
        return $this->belongsTo('App\Accessori', 'accessori_id', 'id');
    }
}

最后一个模型是针对上面两个表之间的关系的:

class ProductAccessori extends Model {

    protected $table = 'accessori_products';

    public function accessoriProducts() {
        return $this->belongsTo('App\Product', 'accessori_id', 'products_id');
    }

}

我正在尝试获取每个产品的配件并获得翻译,但我对此有很多问题。这也是我第一次与翻译建立多对多关系。谁能把我引向正确的方向?

标签: laraveleloquent

解决方案


控制器

$products = Product::has('accessori')->with([
  'productsLang ',
  'accessori' => function ($accessori){
      $accessori->with([
        'accessoriLang'
      ]);
   }
])->get();

return $products;

您将获得带有 accessoriLang 的产品。


推荐阅读