【发布时间】:2016-04-06 19:29:48
【问题描述】:
我有一个主表 jobs,在单独的表 job_location 中有多个位置。现在我无法更新/删除,如果从job_location 找到额外的行。现在为什么我说DELETE 是因为sync() 这样做了,但它与多对多关系有关。我是 laravel 的新手,只是想用雄辩的方法来实现这一点,否则可以轻松地删除所有行并插入,或者更新每个行并删除剩余的也是一种选择,但我想知道 Laravel 有这方面的东西。
在每个请求中,我都会获得多个工作地点(城市、电话号码、地址未更改/更改),这会造成麻烦。
一些代码截图:
型号:[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(如果存在)。我可以放弃以前的条目,但是如果以前的条目得到更新并输入新的条目,或者如果我们有额外的条目被删除,那就太好了。我知道这听起来很奇怪,但仍然指导我。
【问题讨论】:
-
也许这样的事情可以帮助它遍历给定工作的所有工作地点。
$job = Job::find(ID); JobLocation::where('id',$job->id)->get(); //<-- loop with the foreach through this?
标签: php mysql laravel laravel-5 eloquent