第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

優(yōu)雅地退出 Laravel 作用域

優(yōu)雅地退出 Laravel 作用域

我有一個(gè)范圍,它根據(jù)用戶角色以限制方式起作用,您可以將一組規(guī)則轉(zhuǎn)發(fā)到限制數(shù)據(jù)庫(kù)最終輸出的范圍。一個(gè)非常簡(jiǎn)化的角色限制示例:{    "first_name": "=foo%"}只會(huì)返回first_name以 開(kāi)頭的記錄foo%,這實(shí)際上意味著我已禁止具有該角色的用戶查看任何不以 開(kāi)頭的記錄foo%。這種方法的問(wèn)題在于,如果某人沒(méi)有施加任何限制,他就會(huì)看到一切。我知道這是一個(gè)有效的假設(shè),但如果沒(méi)有施加限制,我想禁止一切,這樣如果創(chuàng)建了新角色,它就沒(méi)有任何權(quán)利。目前我正在針對(duì)這種情況拋出異常:public function apply(Builder $builder, Model $model){    $input = $this->getAuthValues(get_class($model));    if (count($input) < 1) {        throw new \Exception('No rights for you');    }    $jsonQuery = new JsonQuery($builder, $input); <-- class responsible for assembling the queries based on the input    $jsonQuery->search();}但這當(dāng)然也不例外。在這種情況下我希望返回空數(shù)組。我可以使用某種方法來(lái)優(yōu)雅地退出范圍并返回空結(jié)果,而無(wú)需在之后實(shí)際執(zhí)行查詢嗎?
查看完整描述

2 回答

?
Cats萌萌

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊

我找到了一個(gè)解決方案來(lái)進(jìn)行不可能的查詢,該查詢將返回 0 結(jié)果。


public function apply(Builder $builder, Model $model)

{

    $input = $this->getAuthValues(get_class($model));


    if (count($input) < 1) {

        $builder->whereRaw('1 = 0');

        return;

    }


    $jsonQuery = new JsonQuery($builder, $input);

    $jsonQuery->search();

}


查看完整回答
反對(duì) 回復(fù) 2023-08-19
?
明月笑刀無(wú)情

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊

由于作用域通常是鏈接的(稱為流暢),并且作用域不直接負(fù)責(zé)執(zhí)行查詢,因此我認(rèn)為您不能“優(yōu)雅地退出”,因?yàn)橄乱粋€(gè)調(diào)用仍然需要一個(gè)對(duì)象來(lái)處理Builder。


一種可能的解決方案(并不簡(jiǎn)單)是創(chuàng)建一個(gè)擴(kuò)展該類的類Builder,并重寫負(fù)責(zé)實(shí)際從數(shù)據(jù)庫(kù)獲取結(jié)果的所有方法。我不確定您需要重寫的所有方法才能在所有情況下都沒(méi)有錯(cuò)誤地工作。您可能還想處理其中的一些插入和更新情況AbortedBuilder。


class AbortedBuilder extends Builder

{

    ...


    /**

     * Run the query as a "select" statement against the connection.

     *

     * @return array

     */

    protected function runSelect()

    {

        return [];

    }

    

    ...


    /**

     * Run a pagination count query.

     *

     * @param  array  $columns

     * @return array

     */

    protected function runPaginationCountQuery($columns = ['*'])

    {

        return [];        

    }


    ...


    /**

     * Insert a new record and get the value of the primary key.

     *

     * @param  array  $values

     * @param  string|null  $sequence

     * @return int

     */

    public function insertGetId(array $values, $sequence = null)

    {

        throw new \Exception('You are trying to insert using an aborted query!');

    }


    ...

}

然后在你的范圍內(nèi)你可以這樣做:


public function apply(Builder $builder, Model $model)

{

    $input = $this->getAuthValues(get_class($model));


    if (count($input) < 1) {

        $builder = new AbortedBuilder();

    } else {

        $jsonQuery = new JsonQuery($builder, $input);

        $jsonQuery->search();

}


查看完整回答
反對(duì) 回復(fù) 2023-08-19
  • 2 回答
  • 0 關(guān)注
  • 163 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)