亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Laravel:如何在收集前在自定義 GetAttribute 中進行過濾

Laravel:如何在收集前在自定義 GetAttribute 中進行過濾

PHP
慕森王 2022-11-12 13:14:09
將Custom Get Attribute字段檢索到collection. 我現在需要在使用前過濾get()例子:對于is_paid自定義屬性//is_paidpublic function getIsPurchasedAttribute(){    //Since purchased has one relation with user    return !empty($this->purchasedRelation) ? true : false;}我現在需要User基于 is_purchased 進行檢索,例如:public function index(Request $request){        $isPaid = $request->is_paid;        $users = User::query();        if($isPaid){            $users = $users->where('is_paid', true);        }        $users = $users->paginate(10);        return view('user.index', [            'users' => $users        ]);    }如果我這樣做,它將返回:未找到列:1054 'where 子句中的未知列'is_paid'是的,我可以這樣做,但我現在無法使用paginate功能:$users = User::get();$users = $users->where('is_paid', 1);return view('user.index', [    'users' => $users]);
查看完整描述

2 回答

?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

whereHas()您可以使用該方法返回所有已購買的用戶。


public function index(Request $request){

    $users = User::query();


    if ($request->is_paid) {

        $users->whereHas('purchasedRelation');

    }


    return view('user.index', [

        'users' => $users->paginate(10),

    ]);

}


查看完整回答
反對 回復 2022-11-12
?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

如果有人偶然發現同樣的錯誤并供將來參考,我將發布我用來解決問題的方法:


創建的自定義getAttribute 只能在檢索模型后獲取。


那是使用first()或find()


您不能在查詢集合中進行過濾。


所以為了過濾唯一的is_paid屬性;我首先檢索模型的集合,然后像這樣過濾:


public function index(Request $request){

    $isPaid = $request->is_paid;


    $users = User::get();


    if($isPaid){

        $users = $users->where('is_paid', true);


    }


    $users = $users->paginate(10);


    return view('user.index', [

        'users' => $users

    ]);


}

為了使用分頁進行收集,我遵循了Gist For Paginated Collections In Laravel


查看完整回答
反對 回復 2022-11-12
  • 2 回答
  • 0 關注
  • 163 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號