0

Collin James のこの優れたソリューションをLaravel 4で動作するように更新しようとしました。

運がなければ知るまで。これは私が思いついたものです:

/app/libraries/Model.php (composer を使用してライブラリ ディレクトリを登録しました)

namespace Elegant;

class Model extends \Illuminate\Database\Eloquent\Model {
    function __construct() 
    {
        echo 'Show me if the Model exension works<br />';
    }

    protected function query()
    {
        echo 'Show me if the query function gets called<br />';
        return new \Elegant\Query($this);
    }
}

/app/libraries/Query.php (composer を使用してライブラリ ディレクトリを登録しました)

namespace Elegant;

class Query extends \Illuminate\Database\Query {

    public function __construct() 
    {
        echo 'Show me if the Query exension works<br />';
    }

    public function byArray($column, $value) 
    {
        if (is_array($value))
            return $this->whereIn($column, $value);
        else
            return $this->where($column, '=', $value);
    }

    public function __call()
    {
    }
}

/app/config/app.php

'aliases' => array(
    ...
    'Eloquent'        => 'Elegant\Model',
    ...
)

機能する唯一のものは次のとおりです。

  • 「モデルエクステンションが機能するかどうか見せてください」.

他の「マーカー」は機能しません。

  • query() はまったく呼び出されません
  • 最初にElegant/Queryを見る代わりに、Eloquent/Queryが使用されます
4

1 に答える 1

0

QueryScopes とはどういう意味ですか? http://laravel.com/docs/eloquent#query-scopes クエリのカスタム スコープを追加できます。追加のパラメーターを追加することもできますが、 $query は常に追加されます (現在のクエリです) おそらく次のようなものです:

public function scopeByArray($query, $column, $value)
{
    if (is_array($value))
        return $query->whereIn($column, $value);
    else
        return $query->where($column, '=', $value);
}

そして、ちょうどUser::byArray($column, $value)->orderBy(..)

そして、Eloquent を拡張してそこに関数を追加することができます ( class BaseModel extends Eloquent)

于 2013-06-12T15:07:07.503 に答える