web-dev-qa-db-fra.com

Comment toujours ajouter des attributs à Laravel Modèle éloquent?

Je me demandais comment ajouter toujours des données au modèle Eloquent sans avoir besoin de le demander par exemple lors de l'obtention de la base de données de formulaires Posts Je veux ajouter les informations utilisateur pour chaque utilisateur comme:

{
    id: 1
    title: "My Post Title"
    body: "Some text"
    created_at: "2-28-2016"
    user:{
            id: 1,
            name: "john smith",
            email: "[email protected]"
         }
}
15
Mustafa Dwekat

Après quelques recherches, j'ai trouvé que vous devez simplement ajouter l'attribut que vous voulez au $appends tableau dans votre modèle Eloquent:

 protected $appends = ['user'];

Mise à jour: Si l'attribut existe dans la base de données, vous pouvez simplement utiliser protected $with= ['user']; selon David Barker's commentaire ci-dessous

Créez ensuite un Accesseur en tant que:

public function getUserAttribute()
{

    return $this->user();

}

De cette façon, vous aurez toujours l'objet utilisateur pour chaque publication disponible en tant que:

{
    id: 1
    title: "My Post Title"
    body: "Some text"
    created_at: "2-28-2016"
    user:{
            id: 1,
            name: "john smith",
            email: "[email protected]"
         }
}
18
Mustafa Dwekat

J'ai trouvé ce concept intéressant, j'apprends et partage des choses. Ici, dans cet exemple, j'ajoute la variable id_hash qui est ensuite convertie en méthode par cette logique.

Laravel lui-même ajoute get et Attribute pour combiner tous ensemble, il donne 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);
    }
}

Pour simplifier les choses, ajouter une variable serait comme ceci

protected $appends = ['id_hash','test_var'];

La méthode serait définie dans le modèle comme ceci

 public function getTestVarAttribute(){
        return "Hello world!";
    }
0
Hemant Kumar