2016-12-07 3 views
0

Ich kann es einfach nicht herausfinden, und ich werde verrückt.Speichern in einer Referenztabelle mit einem Fremdschlüssel (LARAVEL 5.2)

Ich habe 2 Tabellen: Projekte, Galerien

In der Projekttabelle habe ich diese Felder: Titel, Beschreibung, Galerie (Multiupload)

die Galerien Tabelle ist eine Referenztabelle, die Projekt-IDs und Datei speichert Namen von Bildern

Ich habe gelesen, dass die beste Möglichkeit, ein Array von Werten zu einem Datensatz zu speichern, eine Referenztabelle setzt, die die Beziehung zwischen diesen Werten und der Datensatz-ID beibehält.

Das ist meine eigentliche config:

ich meine Galerie Modell gesetzt

class Gallery extends Model 
{ 
    public function project() 
    { 
    return $this->hasMany('App\Project'); 
    } 
} 

ich mein Projekt Modell

class Project extends Model 
{ 
    public function gallery() 
    { 
    return $this->belongsTo('App\Gallery'); 
    } 
} 

an meinem Projekt-Controller ...

$post = new Project; 
$post->title = $data->title; 
$post->save(); 

Jetzt ich sollte die tatsächliche Beziehung tun. Speichern Sie die Dateinamen in der Spalte image_name in der galleries-Tabelle und die Projekt-ID in der Spalte project_id in der galleries-Tabelle.

Ich habe $ filenames, die das Array ist dass enthält die Dateinamen .., die in der Referenztabelle gespeichert werden muss

Antwort

0

Projekt zur Galerie gehört, so in Ihrem Fall muss es mindestens 3 Spalten enthalten: id, image_name und project_id (keine id_project)

Dann, wenn $filename Array Dateinamen enthält, und $ post ist Instanz von $gallery tun Sie einfach dies:

foreach($filename as $file) 
    $post->gallery()->create(['image_name' => $file]); 

wird dies zu $post Galerie wie viele Elemente enthalten Ihre $filename Array verwendet, so viele neue Projekte erstellen.

Kleiner Tipp: Benennen Sie Ihre project() Relation-Methode zu projects() - ist einfacher zu verstehen, was es enthalten kann. Der aktuelle Name deutet nur auf ein Projekt hin.

+0

$ filename enthält nur das Array von f ilenames der ausgewählten Bilder [banana.jpg, apple.jpg, peach.jpg] ... Ich muss diese Daten in getrennten Zeilen mit der Projekt-ID in der Spalte project_id (Fremdschlüssel) speichern – rolfo85

+0

Ich habe meine Antwort aktualisiert – piotr

+0

Danke für Ihre Hilfe, aber ich bekomme immer "MassAssignmentException" mit create. Nur eine Klarstellung, in diesem Controller speichere ich ein Projekt, das Bilder hat .. also das Projekt und seine Felder sind korrekt gespeichert, aber die Bilder (Dateinamen) müssen in einer anderen Tabelle gespeichert werden, die den Verweis zwischen Projekt ID behält und Dateinamen. Ich möchte sie in der Galleries-Tabelle speichern und die Projekt-ID speichern, zu der sie gehören. – rolfo85

0

Die Lösung war viel einfacher, als ich dachte

Ich kann es einfach nicht herausfinden, und ich bin immer verrückt.

Ich habe 2 Tabellen: Projekte, Galerien

In der Projekttabelle habe ich diese Felder: Titel, Beschreibung, Galerie (Multiupload)

die Galerien Tabelle ist eine Referenztabelle, die Projekt-IDs und Datei speichert Namen von Bildern

Ich habe gelesen, dass die beste Möglichkeit, ein Array von Werten zu einem Datensatz zu speichern, eine Referenztabelle setzt, die die Beziehung zwischen diesen Werten und der Datensatz-ID beibehält.

Das ist meine eigentliche config:

ich meine Galerie Modell gesetzt

class Gallery extends Model 
{ 
    // you must indicate the DB fields that will be used by the create method 
    protected $fillable = ['project_id', 'image_path']; 
} 

ich mein Projekt Modell

class Project extends Model 
{ 
    public function gallery() 
    { 
    return $this->hasMany('App\Gallery'); 
    } 
} 

mein Projekt-Controller ...

$post = new Project; 
$post->title = $data->title; 
$post->description = $data->description; 
$post->client = $data->client; 
$post->save(); 

$postGallery = new Gallery; 

// $images is an array   
$images = $data->file('gallery'); 

foreach($images as $key => $image) { 

    $filename = 'banana.jpg' 

    $postGallery->create(['image_path' => $filename, 'project_id' => $data->id]); 
} 
Verwandte Themen