在我的应用程序中,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;
}