2015-10-18 36 views
1

我想使用一些模型工廠種子數據庫,但我得到的錯誤call to member function create() on a non-objectLaravel調用成員函數創建()非對象

下面是我的模型的工廠上:

$factory->define(App\Organisation::class, function ($faker) { 
    return [ 
    'name' => $faker->company, 
    ]; 
}); 

$factory->define(App\Department::class, function ($faker) { 
    return [ 
    'name' => $faker->catchPhrase, 
    'organisation_id' => factory(App\Organisation::class)->make()->id, 
    ]; 
}); 

$factory->define(App\User::class, function ($faker) { 
    return [ 
    'email' => $faker->email, 
    'password' => str_random(10), 
    'organisation_id' => factory(App\Organisation::class)->make()->id, 
    'remember_token' => str_random(10), 
    ]; 
}); 

在我播種機我使用以下命令,創建2個組織和關聯用戶和部門,每個組織,然後使用戶該部門的經理:

factory(App\Organisation::class, 2) 
     ->create() 
     ->each(function ($o) 
     { 
      $user = $o->users()->save(factory(App\User::class)->make()); 

      $department = $o->departments()->save(factory(App\Department::class)->make()); 

      $department->managedDepartment()->create([ 
       'organisation_id' => $o->id, 
       'manager_id' => $user->id, 
      ]); 


     }); 

但是我得到的是fatalerrorexception call to member function create() on a non-object

我以爲$department是一個對象嗎?

我係車型如下:

class Department extends Model 
{ 

    protected $fillable = ['name','organisation_id']; 

    public function organisation() 
    { 
     return $this->belongsTo('App\Organisation'); 
    } 

    /* a department is managed by a user */ 
    public function managedDepartment() 
    { 
     $this->hasOne('App\ManagedDepartment'); 
    } 
} 

而且我managedDepartment模型如下:

class ManagedDepartment extends Model 
{ 
    protected $table = 'managed_departments'; 


    protected $fillable = ['organisation_id', 'department_id', 'manager_id',]; 


    public function department() 
    { 
     $this->belongsTo('App\Department'); 
    } 

    public function manager() 
    { 
     return $this->belongsTo('App\User'); 
    } 
} 

誰能幫助?

回答

0

嘗試返回你的關係

public function department() 
    { 
     return $this->belongsTo('App\Department'); 
    } 

這裏

/* a department is managed by a user */ 
    public function managedDepartment() 
    { 
     return $this->hasOne('App\ManagedDepartment'); 
    } 

我認爲這將解決您的問題。

+0

以及斑點。添加回報修復了問題。 – adam78

0

首先,不要讓外鍵可輸入!其次,貴組織在ManagedDepartment中的職能是什麼?你應該創建一個,否則以下將無法工作,因爲關聯是不可能的。 第三,我想你應該在以下

$factory->define(App\Organisation::class, function ($faker) { 
    return [ 
    'name' => $faker->company, 
    ]; 
}); 

$factory->define(App\Department::class, function ($faker) { 
    return [ 
    'name' => $faker->catchPhrase, 
    'organisation_id' => factory(App\Organisation::class)->create()->id, 
    ]; 
}); 

$factory->define(App\User::class, function ($faker) { 
    return [ 
    'email' => $faker->email, 
    'password' => str_random(10), 
    'organisation_id' => factory(App\Organisation::class)->create()->id, 
    'remember_token' => str_random(10), 
    ]; 
}); 

而且改制()創建():

factory(App\Organisation::class, 2) 
    ->create() 
    ->each(function ($o) 
    { 
     $user = factory(App\User::class)->create(); 
     $o->users()->attach($user->id); 

     $department = factory(App\Department::class)->create(); 
     $o->departments()->attach($department); 

     $managedDep = new ManagedDepartment(); 
     $managedDep->associate($o); 
     $managedDep->associate($user); 
     $managedDep->associate($department); 
     $managedDep->save(); 
    }); 
+0

您的代碼是另一種解決方案。 ozzii代碼寫在文檔中。 – mcklayin

相關問題