Как я могу обновить существующие отношения "Жрец" в Laravel 4?

Я пытаюсь обновить отношения отношений "один ко многим" в Laravel. К сожалению, я не смог найти документацию. Кто-нибудь может мне помочь?

Это то, что у меня есть до сих пор:

class Account extends Eloquent 
{
     public function users()
     {
         return $this->hasMany('User');
     }
}

class User extends Eloquent 
{
     public function account()
     {
         return $this->belongsTo('Account');
     }
}

Теперь я пытаюсь обновить отношения от USER (1) > ACCOUNT (50) до USER (1) > ACCOUNT (99). Как мне это сделать? Я попробовал следующее:

$account = Account::find(99);

User::find(1)->account()->save($account);

Но это не работает:-( Любая помощь глубоко ценится!!

UPDATE:

Следующие работы:

$user = User::find(1);
$user->account_id = 99;
$user->save();

... но там ДОЛЖНО быть лучшим решением, как выше, правильно?

Он работает во многих отношениях ко многим с помощью метода save() и attach() для обновления отношения между таблицами (с обеих сторон отношения). В отношениях "один ко многим" метод attach(), похоже, не поддерживается.

Ответы

Ответ 1

Официальный ответ Тейлора Отуэлла:

$account = Account::find(99);
User::find(1)->account()->associate($account)->save();

Я не смог найти метод associate() в официальных документах. Поэтому, если кто-то ищет решение для этого. Здесь вы идете!

Ответ 3

Вот как я бы это сделал

 //step 1

Мои миграции

class CreateUsersTable extends Migration {

     public function up()
     {
         Schema::create('users', function(Blueprint $table) {
             $table->engine = 'InnoDB';
             $table->increments('id');
             $table->string('first_name');
             $table->string('last_name');
             $table->timestamps();
         });
     }

     public function down()
     {
         Schema::drop('users');
     }

 }

 class CreateUserDetailsTable extends Migration {

     public function up()
     {
         Schema::create('user_details', function(Blueprint $table) {
             $table->engine = 'InnoDB';
             $table->increments('id');
             $table->integer('user_id')->unsigned()->unique('user_id', 'user_details_user_id');
             $table->foreign('user_id')->references('id')->on('users');
             $table->enum('gender', array('male', 'female'))->nullable();
             $table->string('city')->nullable();
             $table->date('date_of_birth')->nullable();
             $table->timestamps();
         });
     }

     public function down()
     {
         Schema::drop('user_details');
     }

 }

Тогда

 //step 2

Мои базовые модели

 class UserDetail extends Eloquent {

     protected $guarded = array();

     protected $table = 'user_details';

     public function user()
     {
        return $this->belongsTo('User');
     }
 }

 class User extends Eloquent {

     protected $table = 'users';

     protected $guarded = array();

     public function detail()
     {
         return $this->hasOne('UserDetail');
     }
 }

Тогда

 //step 3

Мои контроллеры - Обновление схемы user_details

  //When Updating records i get the raw data from say an input
  $detail = Input::all();

  //then find the user
  $user = User::find(1);

  //then update the details
  $detail = $user->detail()->update($detail);

  //then respond back with the detail
  Response::json($detail);

Мои контроллеры - создание схемы user_details

  //again get data input from source, the source does not come with user id
  $detail = Input::all();

  //when creating new record
  $detail = new UserDetail($detail);
  $detail = $user->detail()->save($detail);
  return Response::json($detail);

И это для создания и обновления новых записей с использованием Laravel 4 принадлежит отношениям

Ответ 4

**

Попробуйте

$user = User::find();
$account = Account::find()->user()->save($user)

Мои извинения, я не понимал, что нужно сделать.