2013-06-12 48 views
0

我試圖更新this excellent solution of Collin James以在Laravel 4中工作。在Laravel 4中創建可鏈式方法

直到知道沒有運氣。這是我想出了:

/app/libraries/Model.php(我已經註冊了圖書館目錄使用作曲家)

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(我已經註冊使用的作曲家庫目錄)

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', 
    ... 
) 

的作品的唯一事情是:

  • 「告訴我,如果exension的運作模式」。

其他的「標記」不工作:

  • 查詢()不會被調用所有
  • 雄辯/查詢使用而不是看着優雅,/查詢第一
+0

這些都不是必要的,你能告訴我們你想做什麼(因爲它可能不會覆蓋方法)。 – clone1018

回答

0

是QueryScopes是什麼意思? http://laravel.com/docs/eloquent#query-scopes 您可以爲查詢添加自定義範圍。您還可以添加額外的參數,但總是被添加在$查詢(並且是當前查詢) 大概是這樣的:

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(..)

,你可以直接擴展雄辯和增加功能那裏(class BaseModel extends Eloquent

+0

也可以通過這種方式設置$ hidden和$ visible屬性嗎? http://stackoverflow.com/questions/16917051/laravel-eloquent-eager-loaded-hidden-visible-properties –