2015-06-25 2 views
-1

У меня есть user Модель и каждый пользователь имеет несколько licenses. Существуют две лицензии по умолчанию, которые применяются ко всем пользователям, которые не находятся в таблице licenses, и их необходимо создать «на лету» с использованием определенных данных, содержащихся в модели User.Laravel eloquent добавить дополнительные модели к hasMany

Как я могу создать 2 лицензии каждый раз, когда получаю лицензии пользователя и добавляю их к выходу licenses()?

class User extends Model implements AuthenticatableContract, CanResetPasswordContract { 

    use Authenticatable, CanResetPassword; 

    protected $table = 'users'; 
    public $timestamps = false; 

    protected $fillable = ['name', 'email', 'password']; 

    protected $hidden = ['password', 'remember_token']; 

    public function licenses() 
    { 
     return $this->hasMany('App\License', 'user_id', 'id')->where('deleted', '=', '0'); 
    } 
} 
+1

Downvote без обратной связи, очень полезно – Wasim

+0

Где хранятся эти дополнительные лицензии? –

+0

Почему бы не добавить их в таблицу лицензий при создании пользователя? Вы можете сделать это в «EventProvider». – Jerodev

ответ

0

Вы можете создать дополнительную функцию в модели, где вы вызываете лицензии и добавляете дополнительные лицензии.

Не забудьте проверить все места, где вы используете эту функцию, чтобы не происходило странных вещей.

<?php 

class User extends Model implements AuthenticatableContract, CanResetPasswordContract { 

    use Authenticatable, CanResetPassword; 

    protected $table = 'users'; 
    public $timestamps = false; 

    protected $fillable = ['name', 'email', 'password']; 

    protected $hidden = ['password', 'remember_token']; 

    // HasMany function 
    public function _licenses() 
    { 
     return $this->hasMany('App\License', 'user_id', 'id')->where('deleted', '=', '0'); 
    } 

    // New licenses function 
    public function licenses() 
    { 
     // Get licenses from database 
     $licenses = $this->_licenses; 

     // Add other lisences 
     $licenses = $licenses->add(new License([ "user_id" => $this->id, "name" => "foo" ])); 
     $licenses = $licenses->add(new License([ "user_id" => $this->id, "name" => "bar" ])); 

     // Return the new collection 
     return $licenses 
    } 
} 
+0

Спасибо за это. Я действительно пытался что-то подобное, потому что думал, что '$ this-> hasMany' вернул коллекцию, но, похоже, этого не делает. Я просто попробовал ваш ответ, и я получаю 'Call to undefined method Illuminate \ Database \ Query \ Builder :: add()' – Wasim

+0

О, мой плохой, вам нужно вызывать '$ this -> _ license' без'() ', это вернет коллекцию. – Jerodev

+0

О, круто, хорошо знать, как вернуть коллекцию. К сожалению, это порождает еще одну ошибку 'Call to undefined method Illuminate \ Database \ Eloquent \ Collection :: addEagerConstraints()' – Wasim