В моем приложении admin users
может создать articles
, Таблица статей: ID | user_id | title ...
Для каждого Article
другой пользователь (который не админ) можете опубликовать offer
и таблица предложений: ID | user_id(not admin) | article_id | price ...
Теперь мне нужно get all users
для админ Пользователь, который публикует предложение в своей статье … Я пытаюсь:
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();
и я получаю эти данные:http://i.imgur.com/0kBVGrx.png
но как получить доступ user
данные? я попробую ->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;
}
Других решений пока нет …