2016-02-27 2 views
2

Я использую Laravel 5.2, как написать этот запрос?Как написать этот запрос в Laravel 5.2?

Есть две таблицы, user и articles, у них есть отношения «один ко многим».

Я хочу запросить пользователей в соответствии с этими условиями:
1, Показывать пользователей, у которых есть статьи, а не показывать пользователям, у которых нет статей.
2, Статьи содержат два типа, опубликованные и не опубликованные, «1» означает опубликованные, опубликованные статьи, а не статьи, которые не опубликованы.
3,30 пользователей показаны на странице.

Как это, это неправильно, как его изменить?

HomeController:

public function index() 
{ 
    $users = User::with('articles')->where('is_published','=',1)->paginate(30); 
    return view('index', compact('users')); 
} 

Пользователь:

class User extends Model implements AuthenticatableContract, CanResetPasswordContract, HasRoleAndPermissionContract 

{ 
    use Authenticatable, CanResetPassword, HasRoleAndPermission; 

    protected $fillable = [ 
     'name', 'email', 'password', 
    ]; 

    protected $hidden = [ 
     'password', 'remember_token', 
    ]; 

    public function articles() 
    { 
     return $this->hasMany(Article::class); 
    } 

} 

Статья:

class Article extends Model 
{ 
    public function user() 
    { 
     return $this->belongsTo(User::class); 
    } 

    //edit-1:   
    //Scope a query to only include status=1. 
    public function scopeStatus($query) 
    { 
     return $query->where('status',1); 
    } 

} 

редактировать:
@SSuhat @RamilAmr Спасибо! Если есть локальная область в модели «Статья», как изменить ответ:

$query = User::with(['articles' => function ($q) { 
       $q->where('is_published', 1); 
      }]) 
     ->has('articles') //<<<<<<<<< 
     ->paginate(30); 
return $query; 
+0

Что значит «это неправильно»? Можете ли вы опубликовать свои Eloquent Models, это было бы большой помощью! –

+0

@JohnRoca Thansk.I выложили Eloquent Models. – sunshine

ответ

3

Попробуйте это:

$query = User::with(['articles' => function ($q) { 
       $q->where('is_published', 1); 
      }])->paginate(30); 
return $query; 
+0

Спасибо, если у пользователя нет статей, пользователь не будет показан, как фильтровать? – sunshine

1

, если пользователь не имеет никаких статей, пользователь не будет показано, как фильтровать?

Попробуйте этот код:

$query = User::with(['articles' => function ($q) { 
       $q->where('is_published', 1); 
      }]) 
     ->has('articles') //<<<<<<<<< 
     ->paginate(30); 
return $query; 
0
$query = User::with('articles')->wherehas('articles', function ($q) { 
      $q->where('is_published', 1); 
     })->paginate(30); 
return $query; 

Я надеюсь, что это поможет.

Смежные вопросы