Я использую 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;
Что значит «это неправильно»? Можете ли вы опубликовать свои Eloquent Models, это было бы большой помощью! –
@JohnRoca Thansk.I выложили Eloquent Models. – sunshine