Laravel 4尝试创建相关项目时出错


Laravel 4 error trying to create related items

我试图用PHP/Laravel 4创建一个应用程序,但遇到了一个问题。我有一种情况,我需要为一个给定的人跟踪多个名字,其中一个是主要的。我的表格定义如下:

Schema::create('names', function($table) {
    $table->increments('id');
    $table->string('name');
    $table->integer('person');
    $table->timestamps();
    $table->softDeletes();
});
Schema::create('people', function($table) {
    $table->increments('id');
    $table->integer('primary_name');
    $table->timestamps();
    $table->softDeletes();
});

这个想法是,一个给定的人可以有多个名字(由姓名表上的"person"字段定义),但只能有一个主要名字(由人员表上的"primary_name"字段定义)。

以下是型号:

class Name extends Eloquent {
    protected $guarded = array();
    public static $rules = array(
        'name' => 'required',
        //'person' => 'required'
    );
    public function personOwning()
    {
        return $this->belongsTo('Person','person');
    }
    public function primaryOf()
    {
        return $this->hasOne('Person','primary_name');
    }

}

class Person extends Eloquent {
/*  protected $guarded = array();
    public static $rules = array(
        //'primary_name' => 'required'
    );
*/
    public function primaryName()
    {
        return $this->belongsTo('Name','primary_name');
    }
    public function names()
    {
        return $this->hasMany('Name','person');
    }
}

我试图同时创建一个名字和一个人,并将他们联系起来。代码的第一部分是($submit是来自输入表单的名称):

    $name = new Name;
    $name->name=$submitted;
    $name->save();
    $person=new Person;
    $person->primaryName()->associate($name);
    $person->save();

当我执行此操作时,我会得到一个错误:"未定义的属性:人员::$primary_name"请注意,我还没有尝试创建第二个关系。

这段代码与CodeBright书中的示例完全不同,所以我无法理解我做错了什么。

非常感谢您的帮助。

如果将primary_name列的名称更改为primary_name_id(这是一个很好的约定),它应该可以工作。Laravel做了很多假设,并在snake和camel之间进行了大量转换,因此当属性(primary_name)和函数(primaryName)共享相同名称时,它会混淆。