2013-06-12 87 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 –