Я пытаюсь создать приложение в PHP/Laravel 4 и иметь проблему. У меня есть ситуация, когда мне нужно отслеживать несколько имен для данного человека, один из которых является основным. У меня есть таблицы, определенные следующим образом:Ошибка 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();
});
Идея заключается в том, что данное лицо может иметь несколько имен (как это определено в поле «человек» на столе имен), но только одно основное имя (как определено . в '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');
}
}
Я пытаюсь одновременно создать имя и человека и связать их. Первая часть кода ($ отправленная имя, исходящее от формы ввода):
$name = new Name;
$name->name=$submitted;
$name->save();
$person=new Person;
$person->primaryName()->associate($name);
$person->save();
Когда я выполняю это, я получаю сообщение об ошибке: «Не определено свойство: Person :: $ PRIMARY_NAME» Обратите внимание, что Я еще не пытался создать вторую связь.
Этот код выглядит прямо из примеров в яркой книге Code, поэтому я не могу понять, что я делаю неправильно.
Помогите оценить очень.
Это сработало, но последующего действия не было. Я внес изменения, которые вы предложили, и в таблице имен я изменил 'person' на' person_id'. Но поместив это как следующую строку: '$ name-> personOwning() -> save ($ person);' result in "Call to undefined method Illuminate \ Database \ Query \ Builder :: save()". Если я изменю 'associate' вместо' save', я не получу ошибки, но это также не делает соединение. – jgalak
Какое отношение является '$ name-> personOwning'? HasOne? – Andreas
принадлежит, это в модели имени, выше. – jgalak