我正在工作台环境中开发一个包。我有一个类似
的模型<?php namespace Vendor\Webshop\Models;
use Vendor\Webshop\Models\Country as Country;
use Illuminate\Database\Eloquent\Model as Eloquent;
/**
* A catalog
*/
class Catalog extends Eloquent {
// Define the database
protected $table = 'catalogs';
// Mass assignment restriction
protected $guarded = array('id');
// Return the countries related to this catalog
public function countries() {
return $this->belongsToMany('Vendor\Webshop\Models\Country');
}
/**
* Returns whether to enforce the compability check or not
*/
public function getForceCompabilityTest() {
return $this->force_compability_check;
}
}
?>
我想知道我是否可以拥有像
这样的自定义实例获取器public function getDefaultCatalogs() {
return Catalog::where('is_default_catalog', '=', true)->get();
}}
在班级内部。这是可能的还是方法仅适用于具体实例,我可以从类外部调用Catalog::getDefaultCatalogs()
吗?
答案 0 :(得分:3)
Laravel的Eloquent支持这种行为 - 它叫“查询范围”http://laravel.com/docs/eloquent#query-scopes
在你的模型中,对此:
class Catalog extends Eloquent {
public function scopeDefault($query)
{
return $query->where('is_default_catalog', '=', true);
}
}
然后,您可以使用此调用检索记录
$defaultCatalog = Catalog::default()->get();
// or even order them, if there are more than 1 default catalog. And so on...
$defaultCatalog = Catalog::default()->orderBy('created_at')->get();
答案 1 :(得分:0)
我刚刚将该方法作为静态方法添加到Eloquent模型中,并且工作正常。如果有人对此有任何意见,请告诉我。
public static function getDefaultCatalog() {
return Catalog::where('is_default_catalog', '=', true)->firstOrFail();
}}