2016-05-29 6 views
3

Так что в laravel у меня есть hasMany отношение, Давайте называть его плодами. Пользователь может иметь только 1 каждого фрукта и его флажок на странице профиля. На данный момент у меня есть этого кодаLaravel hasMany обновление отношение

if (!empty($data['fruits'])) { 
    $fruits = $data['fruits']; 
    foreach($user->fruits as $i) { 
    $i->delete(); 
    } 
    for($a=0;$a<count($fruits);$a++) 
    { 
     $AT = new Fruits; 
     $AT->user_id=$user->id; 
     $AT->fruit_id=$fruits[$a]; 
     $AT->save(); 
    } 
} 

Что это делает, проверка, если фрукты выбор пуст, и если оно не, удалять существующие фрукты, связанные с пользователем и создать новые.

Это действительно уродливо, потому что я чувствую себя так, как будто это так. Я не был уверен, как проверить, существует ли идентификатор плода для этого пользователя, и если он его создает. Любая помощь будет оценена по достоинству.

Schema::create('user_fruits', function (Blueprint $table) { 
    $table->engine = 'InnoDB'; 
    $table->increments('id'); 
    $table->integer('user_id')->unsigned(); 
    $table->integer('fruit_id')->unsigned(); 
    $table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade'); 
    $table->foreign('fruit_id')->references('id')->on('fruits')->onUpdate('cascade')->onDelete('cascade'); 
    $table->timestamps(); 
}); 
+0

вы можете поделиться своим пользователем таблицы миграции и фрукты? вам нужно искать user_id в плодах таблицы, и ЕСЛИ он не существует, создавайте новые. –

+0

@ Diego182 Эй, я добавил таблицу user_fruits. –

+0

Используете ли вы метод сводной таблицы для хранения отношений hasMany? –

ответ

0

Любопытное упущение красноречива sync() или даже противоположно save() отношений hasMany. Таким образом, вы должны удалить и добавить снова. Альтернативой, которая не требует дорогостоящих множественных удалений и вставок, является проверка каждого фрукта и удаление (и добавление) только необходимых. Я внимательно слежу за этим, и если ничего из этого не выйдет, я могу сделать PR, чтобы добавить это к Eloquent.

Вот немного чище способ делать то, что у вас уже есть:

Fruits::where('user_id', $user->id)->delete(); 

$fruits = []; 
foreach ($data['fruits'] as $key => $value) { 
    $fruit = new Fruits(); 
    $fruit->id = $key; 
    $fruits[] = $fruit; 
} 

$user->saveMany($fruits); 
Смежные вопросы