推薦幾個你們可能沒用過的查詢構造器的方法

pan_zoe發表於2020-05-25
1. Model()->getQuery()->whereNotKey($id);
2. Model()->getQuery()->whereKey($id);
3. Model()->firstWhere();

首先看第一個把

/**
     * Add a where clause on the primary key to the query.
     *
     * @param  mixed  $id
     * @return $this
     */
    public function whereKeyNot($id)
    {
        if (is_array($id) || $id instanceof Arrayable) {
            $this->query->whereNotIn($this->model->getQualifiedKeyName(), $id);

            return $this;
        }

        return $this->where($this->model->getQualifiedKeyName(), '!=', $id);
    }

我們有時候需要查詢 id != xxx 或者 id not in (1,2,3)。
我們在構建器中需要 where(‘id’,’<>’,1); 或者 whereNotIn(‘id’,[1,2,3])。
這時候 whereKeyNot($mixed) 就能更方便的派上用場了。
原始碼中做了自適應,如果傳遞id是陣列或者集合型別就當whereNotIn處理,如果不是,就當!=處理非常好用。

2.whereKey()

/**
     * Add a where clause on the primary key to the query.
     *
     * @param  mixed  $id
     * @return $this
     */
    public function whereKey($id)
    {
        if (is_array($id) || $id instanceof Arrayable) {
            $this->query->whereIn($this->model->getQualifiedKeyName(), $id);

            return $this;
        }

        return $this->where($this->model->getQualifiedKeyName(), '=', $id);
    }

Key 與 KeyNot 與之相反 就不說了。

3.firstWhere()

/**
     * Add a basic where clause to the query, and return the first result.
     *
     * @param  \Closure|string|array  $column
     * @param  mixed  $operator
     * @param  mixed  $value
     * @param  string  $boolean
     * @return \Illuminate\Database\Eloquent\Model|static
     */
    public function firstWhere($column, $operator = null, $value = null, $boolean = 'and')
    {
        return $this->where($column, $operator, $value, $boolean)->first();
    }

這裡可以看到就是普通的where()只不過幫你執行了first(),相當於你可以少寫一個->first()
這裡用來where語句收尾還是挺方便的 Model::whereName(‘xxx’)->firstWhere(‘status’,1)

本作品採用《CC 協議》,轉載必須註明作者和本文連結

Mr.pan

相關文章