2017-10-11 62 views
0

我需要知道是否可以将模型中的字段数据更改为其他内容? ?在laravel模型中用它替换列关系数据

,比如我有created_by列,里面的数据是1

我已创建与用户模式的关系,一切都很好,但我需要它的用户名来替换created_by

任何请提出建议? ?

这是我曾尝试

class PostsTranslation extends Model { 


    public $appends = [ 'created_by' ]; 


    public function User() { 

     return $this->belongsTo('App\User', 'created_by', 'id')->first(); 

    } 


    public function getCreatedByAttribute() { 
     return $this->User()->name; 

    } 


} 

的错误是这样

enter image description here

我觉得$append更换CREATED_BY值,当belongeTo开始将它读成空

是否有任何解决方案为此或任何方式通过created_by id与belongeTo ?? ?

+0

是否有一个具体的理由,为什么你不希望通过访问该用户的姓名关系? – manniL

+0

不,没有理由,如果我不能找到一种方式,我会通过关系访问它,但我有很多类似的情况(我不能这样做),也为一个API它会对于我的团队更容易理解,对其他人更干净 – programmer

+0

试试这个'return $ this-> belongsTo('App \ User','id');''和'public function getCreatedByAttribute(){this-> user- >名; } ' – Maraboc

回答

0
getCreatedByAttribute 

请不要。不仅你用这种方法搞乱了执行的sql查询的数量,而且你正在打破人们理解你的代码的方式。

$translation = PostsTranslation::with('user')->find(1); 
$translation->created_by->name; 

如果你想这样做的另一种方式,然后应用的getter/setter模式,如:

class PostsTranslation extends Model { 
    public function User() { 
      return $this->belongsTo('App\User', 'created_by', 'id')->first(); 
    } 
    public function getCreatedBy() { 
     return $this->User->name; 
    } 
} 
+0

谢谢我的朋友,第二个它没有工作,并没有根据我的代码改变,错误是用户没有找到,我没有用户()的问题的错误又回来了,为什么它会搞乱?或更多的查询会发生?它会在我的方式或在你的方式查询相同:) – programmer

+0

我认为它应该工作,你确定用户与给定的ID确实存在? –

+0

是的,我敢肯定,它存在,如果我改变了getCreatedBy到别的东西它的工作正常,因为我的例子,但在我的情况下,我需要更换它 – programmer