2016-12-20 3 views
0

Ich habe drei Tabellen & entsprechenden Modelle:Laravel Pivot Beziehung nicht eindeutig zuzuordnen Tabelle/Alias ​​

Tabelle ------ Modell

Papiere ------ Papier

paper_stocks ------ Rohpapier

paper_stock_amounts ------ PaperStockAmount

Papier enthält diff. Arten von Papier. Rohpapier enthält verschiedene Orte, an denen diese Papiere gespeichert werden können PaperStockAmount enthält das Papier ID, die Lager-ID und die Menge, wie ein viele Papier zu bestimmen, sind auf Lager B.

Jetzt möchte ich aus dem Papier ausgehend überprüfen wie viele sind in jedem Vorrat. Im tun dies deshalb meiner Meinung nach.

@foreach($papers as $paper) 
    @foreach($paper->paperStockAmount as $ps) 
     <tr> 
      <td>{{ $ps->stock->name }}</td> 
      <td>{{ $ps->amount }}</td> 
     </tr> 
    @endforeach 
@endforeach 

Dieser jede Art von Papier zeigen sollten und in denen die Bestände zusammen mit dem Betrag, den sie in sind

Dies ist jedoch der Fehler:

SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'paper_stock_amounts' (SQL: select `paper_stock_amounts`.*, `paper_stock_amounts`.`id` as `pivot_id`, `paper_stock_amounts`.`amount` as `pivot_amount` from `paper_stock_amounts` inner join `paper_stock_amounts` on `paper_stock_amounts`.`id` = `paper_stock_amounts`.`id` where `paper_stock_amounts`.`id` in (1, 2)) 

Die Beziehungen sind wie folgt definiert:

Papier

class Paper extends Model 
{ 
    public function paperStockAmount() 
    { 
     return $this->belongsToMany('App\PaperStockAmount', 'paper_stock_amounts')->withPivot('amount'); 
    } 
} 

PaperStockAmount

class PaperStockAmount extends Model 
{ 
    public function paper() 
    { 
     return $this->hasOne('App\Paper', 'id', 'paper_id'); 
    } 

    public function stock() 
    { 
     return $this->hasOne('App\PaperStock', 'id', 'stock_id'); 
    } 
} 

Warum funktioniert das nicht?

Antwort

0

Sie haben eine M-M-Beziehung zwischen paper & paper_stock definiert.

d Wenn Sie paperStockAmount von $paper sind holen, dann würden Sie paper_stock Ergebnisse mit der Pivot-Spalte amount bekommen.

Sie sollten es tun, wie folgt:

@foreach($papers as $paper) 
    @foreach($paper->paperStockAmount as $paper_stock) 
     <tr> 
      <td>{{ $paper_stock->name }}</td> 
      <td>{{ $paper_stock->pivot->amount }}</td> 
     </tr> 
    @endforeach 
@endforeach 

Verwenden pivot die Pivot-Spalte zu holen genannt - amount

hoffe, das hilft!

0

Ich bin nicht sicher, aber es sieht Ihre Beziehung von Paper zu PaperStockAmount ist has-many, so dass Ihre Beziehung, wie sein sollte:

Papier

class Paper extends Model 
{ 
    public function paperStockAmount() 
    { 
     return $this->belongsToMany('App\PaperStockAmount'); 
    } 
} 

Dann arbeiten Sie Ihre Code-Ansicht wird.

ODER

Wenn die Beziehung zwischen von Paper und PaperStock ist many-to-many dann Ihre Beziehung wie sein sollte:

Papier

class Paper extends Model 
{ 
    public function paperStockAmount() 
    { 
     return $this->hasMany('App\PaperStock', 'paper_stock_amounts')->withPivot('amount'); 
    } 
} 

Dann Ihrer Ansicht nach kann es als zugegriffen werden: (nehmen von @saumya Antwort)

@foreach($papers as $paper) 
    @foreach($paper->paperStockAmount as $paper_stock) 
     <tr> 
      <td>{{ $paper_stock->name }}</td> 
      <td>{{ $paper_stock->pivot->amount }}</td> 
     </tr> 
    @endforeach 
@endforeach 
+0

Scheinbar hat viele Pivot nicht unterstützt. Nichts davon funktioniert leider. – Scarwolf

+0

Was ist der Fehler? Und bitte zeigen Sie die Tabellenspalten in Ihrer Frage an. –