[英]How to write this query in 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;
嘗試這個:
$query = User::with(['articles' => function ($q) {
$q->where('is_published', 1);
}])->paginate(30);
return $query;
如果用戶沒有任何文章,則不會顯示該用戶,如何過濾?
試試這個代碼:
$query = User::with(['articles' => function ($q) {
$q->where('is_published', 1);
}])
->has('articles') //<<<<<<<<<
->paginate(30);
return $query;
$query = User::with('articles')->wherehas('articles', function ($q) {
$q->where('is_published', 1);
})->paginate(30);
return $query;
我希望這可以幫助你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.