2016-02-27 112 views
2

我正在使用Laravel 5.2,如何編寫此查詢?如何在Laravel 5.2中編寫此查詢?

有兩個表,userarticles,它們有一對多的關係。

我想根據這些條件查詢用戶:
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

你是什麼意思「這是不對的」?你可以發佈你的雄辯模型,這將是一個很大的幫助! –

+0

@JohnRoca Thansk.I發佈了雄辯的模型。 – 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; 

我希望這可以幫助你。