扩展Eloquent模型,更多魔术方法

时间:2017-11-29 16:53:40

标签: php laravel eloquent laravel-eloquent

情况:在我的工作中,他们对数据库,表和列名称有约定,这些约定有点长且重复。习惯于Eloquent我认为重新实现__get__set方法并不会制造大量的getter会有很多麻烦。这样的事情(toConvention实现了公司的惯例):

use Illuminate\Database\Eloquent\Model;
class CompanyModel extends Model {
    public function __get($key){
        return $this->getAttribute($this->toConvention($key));
    }
    public function __set($key){
        return $this->setAttribute($this->toConvention($key));
    }
}

适用于检索属性,但不适用于检索关系。以下是实施:

use App\CompanyModel as Model
class Location extends Model
{
    protected $table = 'tablename';
    protected $primaryKey = 'primarykeycolumn';
    //...
    public function comissionCurrency(){
        return $this->belongsTo('App\Currency', 'foreign', 'other');
    }
}

use App\CompanyModel as Model
class Currency extends Model
{
    protected $table = 'tablename';
    protected $primaryKey = 'primarykeycolumn';
    //...
}

在请求属性时,如$location->name$location->comission_currency_id一切都按预期工作,检索相应的列名称。但是当我尝试检索belongsTo关系时,在使用toSql()后,我看到几乎形成了正确的查询:select * from table where table.column is null is null部分应该与相应的ID进行比较。 我知道这是由于我的实施,因为当我use Illuminate\Database\Eloquent\Model一切正常时。有趣的是,当我在儿童模型上使用Eloquent的模型并在另一个模型上重新实现时,它起作用(但是我不能在子模型中使用我的魔法方法,在父模型中我可以从这种关系中获取...)

我还没有弄清楚通过阅读Eloquent的代码,任何想法或建议来重新实现哪种方法来完成这项工作? 提前谢谢。

0 个答案:

没有答案