加入时的Laravel / Eloquent变异模型

时间:2017-02-16 22:10:03

标签: php laravel join eloquent mutators

我试图改变模型以显示字符串数组而不是对象数组。

当前输出

{
  "id": 1,
  "company_name": "blah"
  "language": [
    {
      "name": "English"
    },
    {
      "name": "French"
    }
  ] 
},
{
  "id": 2,
  "company_name": "blah2"
  "language": [
    {
      "name": "English"
    },
    {
      "name": "French"
    }
  ] 
}

期望输出

{
  "id": 1,
  "company_name": "blah"
  "language": ["English","French"]
},
{
  "id": 2,
  "company_name": "blah2"
  "language": ["English","French"]
}

合作伙伴模型     

class Partner extends Eloquent
{

   protected $table = 'property_managers';
   protected $visible = array('id','company_name','language');

    public function language(){
       return $this->belongsToMany('Language', 'property_manager_language', 'property_manager_id', 'language_id');
    }

}

语言模型     

class Language extends Eloquent
{
    protected $table = 'languages';
    protected $visible = array('name');

    public function propertyManager()
    {
      return $this->belongsToMany('PropertyManager');
    }
}

我通过下面的代码段

访问它

$pm = Partner::with('language')->get();

我调查了变异器,但它似乎没有在合作伙伴模型中找到该属性。

public function getLanguageAttribute(){
   //run my code to flatten to array
}

所以我很好奇mutators是否不参与联接或者如何修改联接的回报。我可以在语言模型中添加一个mutator,但这只会修改特定模型的属性。任何见解都会有所帮助。感谢

1 个答案:

答案 0 :(得分:0)

在你的模特中,

public function getLanguagesAttribute(){
   return array_pluck(collect($this->language)->toArray(), 'name');
}

luego prueba con esto

$partner = Partner::find(1);
return $partner->languages;