У меня есть таблица master jobs
с несколькими местоположениями в отдельной таблице job_location
. Теперь я не могу обновить/удалить, если дополнительные строки найдены от job_location
. Теперь почему я говорю DELETE
, потому что sync()
сделал это, но это связано со многими отношениями ко многим. Я новичок в laravel, просто пытаюсь получить красноречивый подход к достижению этого, в противном случае удаление всех строк и вставка могут быть сделаны легко ИЛИ обновление каждого и удаление остальных - также вариант, но я думаю, что у Laravel есть что-то для этого.Laravel: Обновление hasMany/BelongTo отношение
В каждом запросе я получаю несколько мест работы (с неизменным/измененным городом, номером телефона, адресом), который создает проблемы.
Некоторые codeshots:
Модель: [Job.php]
class Jobs extends Model
{
protected $fillable = [
'job_id_pk', 'job_name','salary'
];
public function joblocation() {
return $this->hasMany('\App\JobLocation', 'job_id_fk', 'job_id_pk');
}
}
Модель: [JobLocation.php]
class JobLocation extends Model
{
protected $fillable = [
'jobl_id_pk', 'job_id_fk','city', 'address', 'phone_number'
];
public function job() {
return $this->belongsTo('\App\Jobs', 'job_id_fk', 'job_id_pk');
}
}
Контроллер: [JobController.php ]
function jobDetail() {
if($params['jid']) {
// update
$obj = \App\Jobs::find($params['jid']);
$obj->job_name = $params['name'];
$obj->salary = $params['salary'];
$obj->save();
} else {
// create new
$data = array(
'job_name' => $params['name'],
'salary' => $params['salary'],
);
$obj = \App\Jobs::create($data);
}
// don't bother how this $objDetail has associative array data, it is processed so
foreach ($params['jobLocations'] AS $key => $objDetail) {
$jobLoc = new \App\JobLocation;
$jobLoc->city = $objDetail['city'];
$jobLoc->phone_number = $objDetail['phone_number'];
$jobLoc->address = $objDetail['address'];
$jobLoc->job()->associate($obj);
$obj->jobLoc()->save($jobLoc);
}
}
В этом подходе я могу сохранить все места работы, но я также использую эту функцию для обновления. Расскажите, как я могу обновить jobLocations
, если он есть. Я в порядке, чтобы потерять предыдущие записи, но было бы хорошо, если предыдущий будет обновлен, а новый будет введен или если у нас есть дополнительные записи, они будут удалены. Я знаю, что это звучит странно, но все-таки помогает мне.
Может быть что-то подобное может помочь, то перебирает все joblocations для данной работы. '$ job = Job :: find (ID); JobLocation :: where ('id', $ job-> id) -> get(); // <- цикл с помощью foreach через это? ' –