2016-04-17 21 views
0

In meiner App admin users kann articles erstellen. Artikel Tisch ist: ID | user_id | title ...Laravel 5.1 erhalten Daten von verbundenen Tabelle

Für jeden Article andere Benutzer (die Server-Betreiber nicht) eine offer und Angebots Tabelle schreiben kann, ist: ID | user_id(not admin) | article_id | price ...

Jetzt muss ich get all users für eine Admin Benutzer die Post-Angebot zu ihre Artikel ... ich versuche:

public function userbase() 
    { 
     $id = Auth::user()->id;//get admin id 
     $articles = Article::where('user_id', $id)->get();//select all admin articles 
     foreach ($articles as $article) { 

     $users = Offer::where('article_id', $article['id'])->orderBy('created_at', 'desc')->get(); //get all admin users 

     } 


     return $users; 


    } 

aber bekomme ich nur []

auch mein Modell ist: Artikel:

public function offers() { 
    return $this->hasMany('App\Offer'); 
} 

Angebot:

public function user() { 
    return $this->belongsTo('App\User'); 
} 

public function article() { 
    return $this->belongsTo('App\Article'); 
} 

So wie ich alle Benutzerdaten bekommen, das Angebot zu einem Admin-Benutzer geschrieben wurde?

UPDATE

Ich versuche auch diese:

$articles = Article::with([ 
    'offers' => function($query) { 
    $query->orderBy('created_at', 'desc'); 
    $query->with('user'); // if you want to eager load users for each offer too... 
    } 
])->where('user_id', Auth::id())->get(); 

und ich bekomme diese Daten: http://i.imgur.com/0kBVGrx.png

aber wie user Daten zugreifen? Ich versuche ->get('user') aber nicht funktionieren ...

2. UPDATE:

Ich versuche auch:

public function userbase() 
{ 
    $articles = Auth::user()->articles()->get(); 
    foreach ($articles as $article) { 

     $offers = Offer::where('article_id', $article['id'])->orderBy('created_at', 'desc')->get(); 

     } 
    foreach ($offers as $offer) { 

     $users = User::where('id', $offer['user_id'])->orderBy('created_at', 'desc')->get(); 

     } 

     return $users; 
} 

aber ich bekomme nicht definierte Variable Benutzer

+0

sieht aus wie ein schlechtes Datenbank-Design, können Sie 'article_has_offers' Pivot-Tabelle erstellen und zu handhaben es auf diese Weise, anstatt die Abfrage, ob der Benutzer admin oder not.Auch sollten Sie den Fremdschlüssel in Relationen definieren. – Gntem

+0

Ich aktualisiere Frage – Andrew

Antwort

1

starten:
Erste , können Sie in Ihrem Benutzermodell ein Attribut 'isAdmin' hinzufügen.

public function userbase() 
{ 
    return Offer::select('users.*') 
       ->where('users.isAdmin', false) 
       ->join('articles','articles.id','=','offers.article_id') 
       ->join('users','users.id','=','articles.user_id') 
       ->where('articles.user_id', Auth::user()->id) 
       ->orderBy('offers.created_at', 'desc') 
       ->groupBy('users.id') 
       ->get(); 
} 


Ihre Lösung aktualisiert:

public function userbase() 
{ 
    $articles = Auth::user()->articles; 
    foreach ($articles as $article) { 

    $offers = Offer::where('article_id',$article->id)->orderBy('created_at', 'desc')->get(); 

    } 
    $users = array(); 
    foreach ($offers as $offer) { 

    $users[] = User::where('id', $offer['user_id'])->orderBy('created_at', 'desc')->get(); 

    } 

    return $users; 
} 
+0

Ich mache Admin-Feld in Benutzer Tabelle, wo Admin Int 1 und andere Benutzer 9, aber wenn ich Ihren Code versuche, bekomme ich: SQLSTATE [42S02]: Basistabelle oder Ansicht nicht gefunden: 1051 Tabelle 'Benutzer' inconnue (SQL : Wählen Sie 'user'. * aus' offers' innerem Join 'articles' auf' articles'.id' = 'offers'.article_id' wobei' users'.admin' = 9 und 'articles'' user_id' = 8 group by 'users'.id' order by' created_at' desc) – Andrew

+0

was ist Ihr Benutzer Tabellenname in Mysql DB – BKF

+0

seine Benutzer ...auch ich aktualisiere frage mit possibil lösung – Andrew