<address id="n1vvb"></address>
          <font id="n1vvb"></font>

            <thead id="n1vvb"></thead>

                php – Laravel否定了本地范围

                我正在为我的项目使用laravel 5.2我刚刚实现了一个本地范围(为简单起见,让我们使用laravel docs示例 – https://laravel.com/docs/master/eloquent#local-scopes)

                <?php
                
                namespace App;
                
                use Illuminate\Database\Eloquent\Model;
                
                class User extends Model
                {
                    /**
                     * Scope a query to only include popular users.
                     *
                     * @return \Illuminate\Database\Eloquent\Builder
                     */
                    public function scopePopular($query)
                    {
                        return $query->where('votes', '>', 100);
                    }
                
                }

                我打电话:

                $users = App\User::popular()->get();

                它就像一个魅力

                是否可以对范围进行否定?

                $users = App\User::Notpopular()->get();

                或者我必须手动实施上述范围的否定?如果是这样,有更好的方法吗?

                先感谢您!

                它不可能(技术上是,但它需要更多的代码)来创建一个本地范围,否定另一个本地范围而不实现另一个范围方法.但是,可以从另一个范围中的一个范围重用否定的标准.

                以下代码应该可以解决问题:

                public function scopeNotPopular($query) {
                  $query->whereNotIn($this->getKeyName(), function($q) {
                    $q->select($this->getKeyName())->from($this->getTable());
                    $this->scopePopular($q);
                  });
                }

                此代码使用whereNotIn约束从另一个范围应用否定约束.它允许您重用约束逻辑,而不是在两个不同的位置实现原始和否定版本.虽然这些代码量似乎与文档中的示例范围相当,但是对于更复杂的约束更有意义.

                请记住,虽然它允许代码重用,但从性能的角度来看,将要应用的SQL查询可能是次优的.它使用子选择来标识应从结果集中排除的行.

                相关文章
                相关标签/搜索
                特马资料最准2019四肖期期准四肖三期内必出四肖期期准免费公开四肖中特1肖1码期期大公开