Laravel 5.1从连接表中获取数据


Laravel 5.1 get data from connected table

在我的应用程序中,admin users可以创建articles。文章表为:ID | user_id | title ...

对于每个Article,其他用户(非管理员)可以发布offer,Offer表为:ID | user_id(not admin) | article_id | price ...

现在,我需要为一个admin用户get all users,该用户在他们的文章中发布Offer。。。我尝试:

 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;

    }

但我得到的只是:[]

我的模型是:文章:

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

优惠:

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

那么,我如何才能获得发布给管理员用户的所有用户详细信息呢?

更新

我也试试这个:

$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();

我得到了这些数据:https://i.stack.imgur.com/sbMqh.png

但是如何访问CCD_ 8数据呢?我尝试了->get('user'),但不起作用。。。

2.更新:

我也尝试过:

  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;
}

但我得到了未定义的变量用户

试试这个:
首先,您可以在用户模型中添加一个属性"isAdmin"。

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(); 
}


更新您的解决方案:

 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;
 }