簡體   English   中英

如何在Laravel 5.2中編寫此查詢?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM