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 ブックの例とまったく同じように見えるので、何が間違っているのかわかりません。
大変助かります。