0

PHP/Laravel 4 でアプリケーションを作成しようとしていますが、問題があります。特定の人の複数の名前を追跡する必要がある状況があり、そのうちの 1 つがプライマリです。次のように定義されたテーブルがあります。

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」フィールドで定義) は 1 つしか持てません。

モデルは次のとおりです。

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

}

名前と人を同時に作成し、それらを関連付けようとしています。コードの最初の部分は ($submitted は入力フォームからの名前です):

    $name = new Name;
    $name->name=$submitted;
    $name->save();

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

これを実行すると、「未定義のプロパティ: Person::$primary_name」というエラーが表示されます。まだ 2 番目の関係を作成しようとしていないことに注意してください。

このコードは、Code Bright ブックの例とまったく同じように見えるので、何が間違っているのかわかりません。

大変助かります。

4

1 に答える 1