投稿フォームデータベースを取得するときなどに、データを要求せずにEloquentモデルに常にデータを追加する方法を考えていました。各ユーザーのユーザー情報を次のように追加します。
{
id: 1
title: "My Post Title"
body: "Some text"
created_at: "2-28-2016"
user:{
id: 1,
name: "john smith",
email: "[email protected]"
}
}
いくつか検索したところ、Eloquentモデルの$appends
配列に必要な属性を追加するだけでよいことがわかりました。
protected $appends = ['user'];
更新:属性がデータベースに存在する場合、以下の David Barker's コメントに従って
protected $with= ['user'];
を使用できます
次に、以下のようにアクセサを作成します。
public function getUserAttribute()
{
return $this->user();
}
このようにして、常に各投稿のユーザーオブジェクトを次のように使用できます。
{
id: 1
title: "My Post Title"
body: "Some text"
created_at: "2-28-2016"
user:{
id: 1,
name: "john smith",
email: "[email protected]"
}
}
このコンセプトは面白いと思い、学び、共有しました。この例では、このロジックによってメソッドに変換されるid_hash変数を追加しています。最初の文字を受け取り、大文字に変換します。つまり、Idとアンダースコアの後の文字を大文字に変換します。つまり、ハッシュです。
Laravel自体にgetとAttributeを追加してすべてを結合すると、getIdHashAttribute()
が得られます
class ProductDetail extends Model
{
protected $fillable = ['product_id','attributes','discount','stock','price','images'];
protected $appends = ['id_hash'];
public function productInfo()
{
return $this->hasOne('App\Product','id','product_id');
}
public function getIdHashAttribute(){
return Crypt::encrypt($this->product_id);
}
}
物事を簡単にするために変数を追加すると次のようになります
protected $appends = ['id_hash','test_var'];
メソッドはこのようにモデルで定義されます
public function getTestVarAttribute(){
return "Hello world!";
}