Php 对非对象的成员函数create()的Laravel调用

Php 对非对象的成员函数create()的Laravel调用,php,relationship,factory,laravel-5.1,Php,Relationship,Factory,Laravel 5.1,我试图使用一些模型工厂为数据库种子,但在非对象上调用成员函数create()时出错 以下是我的模型工厂: $factory->define(App\Organisation::class, function ($faker) { return [ 'name' => $faker->company, ]; }); $factory->define(App\Department::class, function ($faker) { return

我试图使用一些模型工厂为数据库种子,但在非对象上调用成员函数create()时出错

以下是我的模型工厂:

$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),
  ];
});
在我的seeder中,我使用以下方法创建两个组织和一个将用户和一个部门关联到每个组织,然后使用户成为该部门的经理:

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,
            ]);


        });
但是,我得到了对非对象上的成员函数create()的fatalerrorexception
调用

我想,
$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');
    }
}
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');
    }
}
我的managedDepartment模型如下所示:

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');
    }
}
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');
    }
}

有人能帮忙吗?

试着归还你的亲属

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

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

我想这会解决你的问题。

试着归还你的关系

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

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

我想这会解决你的问题。

首先,不要让外键可填充! 其次,您的组织在管理部门的职能是什么?您应该创建一个,否则以下操作将不起作用,因为无法进行关联。 第三,我认为您应该在下面的代码中将make()更改为create()

$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();
    });

首先,不要使外键可填充! 其次,您的组织在管理部门的职能是什么?您应该创建一个,否则以下操作将不起作用,因为无法进行关联。 第三,我认为您应该在下面的代码中将make()更改为create()

$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();
    });

您的代码是另一个解决方案。ozzii代码像文档一样编写。您的代码是另一个解决方案。ozzii代码像文档中那样编写。很好。添加return修复了这个问题。添加return修复了这个问题。