Ich habe eine Master-Tabelle jobs
mit mehreren Standorten in separaten Tabelle job_location
. Jetzt bin ich nicht in der Lage zu aktualisieren/zu löschen, wenn zusätzliche Zeilen von job_location
gefunden werden. Jetzt, warum ich sage DELETE
ist, weil sync()
tat dies, aber es ist im Zusammenhang mit vielen-zu-viele-Beziehung. Ich bin neu in Laravel, nur versuchen, eloquent Ansatz, um dies zu erreichen, sonst alle Zeilen löschen und Einfügen kann leicht getan werden ODER aktualisieren und löschen Rest ist auch eine Option, aber ich frage mich, Laravel hat etwas dafür.Laravel: Aktualisierung hasMany/BelongTo Relation
In jeder Anfrage bekomme ich mehrere Stellen (mit unveränderter/geänderter Stadt, Telefonnummer, Adresse), die Probleme verursacht.
Einige codeshots:
Modell: [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');
}
}
Modell: [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');
}
}
Controller: [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);
}
}
In diesem Ansatz kann ich alle Job-Standorte speichern, aber ich verwende die gleiche Funktion, um auch zu aktualisieren. Bitte sagen Sie mir, wie ich jobLocations
aktualisieren kann, falls vorhanden. Ich bin in Ordnung, vorherige Einträge zu verlieren, aber es wäre gut, wenn vorher aktualisiert und neu eingegeben wird ODER wenn wir zusätzliche Einträge haben, werden sie gelöscht. Ich weiß, klingt seltsam, aber immer noch einen Weg.
Vielleicht wie etwas das könnte es alle joblocations helfen, für die gegebene Aufgabe Schleifen durch. '$ job = Job :: finden (ID); JobLocation :: where ('id', $ job-> id) -> get(); // <- Schleife mit der foreach durch? –