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

时间:2013-08-31 22:52:03

标签: php laravel laravel-4 eloquent

我正在尝试在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'字段定义),但只有一个主名称(由people表上的'primary_name'字段定义。< / p>

以下是模型:

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

执行此操作时,出现错误:“Undefined property:Person :: $ primary_name” 请注意,我还没有尝试创建第二个关系。

这段代码看起来是Code Bright书中的例子,所以我无法理解我做错了什么。

非常感谢。

1 个答案:

答案 0 :(得分:0)

如果您将primary_name列的名称更改为primary_name_id(无论如何这是一个很好的惯例),它应该可以正常工作。 Laravel做了很多假设,并且在snake-case和camel-case之间进行了很多转换,所以当你有一个共享相同名称的属性(primary_name)和函数(primaryName)时会感到困惑。