Как я могу обновить существующие отношения "Жрец" в 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() в официальных документах. Поэтому, если кто-то ищет решение для этого. Здесь вы идете!
Ответ 2
Эй, вы можете отсылать документы laravel для решения.
Ссылка http://laravel.com/docs/4.2/eloquent#inserting-related-models
$account = Account::find(10);
$user->account()->associate($account);
$user->save();
Ответ 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)
Мои извинения, я не понимал, что нужно сделать.