2013-08-31 2 views
0

Я пытаюсь создать приложение в 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, поэтому я не могу понять, что я делаю неправильно.

Помогите оценить очень.

ответ

0

Если вы изменили название столбца primary_name на primary_name_id (это хорошо, так или иначе), он должен работать. Laravel делает много предположений и много переводит между змеиным футляром и верблюжьим футляром, поэтому он запутывается, когда у вас есть атрибут (primary_name) и функция (primaryName), которые имеют одно и то же имя.

+0

Это сработало, но последующего действия не было. Я внес изменения, которые вы предложили, и в таблице имен я изменил 'person' на' person_id'. Но поместив это как следующую строку: '$ name-> personOwning() -> save ($ person);' result in "Call to undefined method Illuminate \ Database \ Query \ Builder :: save()". Если я изменю 'associate' вместо' save', я не получу ошибки, но это также не делает соединение. – jgalak

+0

Какое отношение является '$ name-> personOwning'? HasOne? – Andreas

+0

принадлежит, это в модели имени, выше. – jgalak

 Смежные вопросы

  • Нет связанных вопросов^_^