Laravel 4 Создание формы для добавления записи с отношением

Я создал очень базовую модель. У меня есть таблица лиц и таблица электронных писем.
Также я должен создать ссылку в persons/show.blade.php («Добавить почту»).
Мои модели

class Person extends Eloquent {

protected $table = 'persons';

public function email()
{
return $this->HasMany('Email');
}

}

а также

class Email extends Eloquent {

protected $table = 'emails';

public static $rules = array(
'email'=>'required|unique:emails'
);

public function person()
{
return $this->belongsTo('Person');
}
}

Как я могу передать $person->id к новому контроллеру?

В моем show.blade.php за Person я добавил

{{ HTML::linkRoute('email.adduseremail','Προσθήκη Email',array($person->id))}}

и я добавил в свой EmailController

public function adduseremail($id)
{
return View::make('email.createforuser',['id'=>$id]);
}

public function storeforuser($pid)
{
$validator = Validator::make(Input::all(),Email::$rules);

if ($validator->fails()) {
$messages = $validator->messages();
foreach ($messages->all('<li>:message</li>') as $message)
return Redirect::back()->withInput()->WithErrors($messages);
}
$person = Person::FindorFail($pid);

$email = new Email;
$email->email = Input::get('email');
$email->person()->associate($person);
$email->save();

return Redirect::route('person.index');
}

и мой createforuser вид

<p>
{{Form::open(['route'=>'email.storeforuser'])}}
<div>
{{Form::label('email', 'Email:')}}
{{Form::input('text', 'email')}}
{{$errors->first('email')}}
</div>
</br>
<div>
{{Form::submit('Submit')}}
</div>
{{Form::close()}}
<p>

Я продолжаю получать Попытка получить свойство необъекта (Просмотр: /var/www/laravel/app/views/email/show.blade.php)

Есть ли какой-нибудь пример использования Form и Models для вставки новых объектов в базу данных для отношений «ownTo»? Я не мог найти ничего полного, только частичные примеры.

0

Решение

Обычно я использую сеансы laravel или кэш laravel, чтобы временно сохранить идентификатор, который мне понадобится позже, например:
Session :: набор ( ‘PersonId’, $ человек-> идентификатор);
Session :: получить ( ‘PersonId’);

То же самое относится и к кешу, за исключением того, что кеш будет длиться только для текущего сеанса запроса, является постоянным для сеанса
надеюсь, это поможет

1

Другие решения

Я не уверен, должен ли я ответить на свой вопрос, но в конце концов я нашел решение.
Я установил два новых маршрута

Route::post('email/adduseremail/{pid}', array('uses'=>'EmailController@adduseremail','as' => 'email.adduseremail'));
Route::post('email/storeforuser/{pid}', array('uses' =>'EmailController@storeforuser','as' => 'email.storeforuser'));

и создал соответствующие методы в моем контроллере

public function adduseremail($id)
{
$pname = Person::Find($id)->name;
$psurname = Person::Find($id)->surname;

return View::make('email.createforuser',array('id'=>$id,'name'=>$pname, 'surname'=>$psurname));
}

а также

public function storeforuser($pid)
{
$validator = Validator::make(Input::all(),Email::$rules);
if ($validator->fails())
{
$messages = $validator->messages();
foreach ($messages->all('<li>:message</li>') as $message)
return Redirect::back()->withInput()->WithErrors($messages);
}
$person = Person::FindorFail($pid);
$email = new Email;
$email->email = Input::get('email');
$email->person()->associate($person);
$email->save();

return Redirect::route('person.show',array($person->id));

}

затем на страницах бланка просмотра я могу передать параметры из вида в форму и т. д.

person.show.blade.php{{Form::Open(array('route' => array('email.adduseremail', $person->id),'method' => 'POST','style'=>'display:inline;'))}}
{{Form::submit('Add Email')}}
{{Form::close()}}

а также

email.createforuser.blade.php

{{Form::open(array('route'=>array('email.storeforuser',$id),'method' => 'POST','style'=>'display:inline;'))}}
{{Form::label('email', 'Email:')}}
{{Form::input('text', 'email')}}
{{Form::submit('Submit')}}

Надеюсь, что это помогает другим

0

По вопросам рекламы [email protected]