Model Laravel模型获取类的实例

Model Laravel模型获取类的实例,model,laravel,laravel-4,Model,Laravel,Laravel 4,我正在工作台环境中开发一个包。我有一个这样的模特 <?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

我正在工作台环境中开发一个包。我有一个这样的模特

<?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;
    }

}

?>

在类本身内部。这是否可能,或者这些方法仅适用于具体实例,我可以从类外部像调用
Catalog::getDefaultCatalogs()
那样调用它们吗?

我刚刚将该方法作为静态方法添加到雄辩的模型中,效果很好。如果有人对此有意见,请告诉我

public static function getDefaultCatalog() {
  return Catalog::where('is_default_catalog', '=', true)->firstOrFail();
}}

Laravel雄辩地支持这种行为——称之为“查询范围”

在您的模型中,请执行以下操作:

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

您是否尝试过类似于
Vendor\Webshop\Models\Catalog::getDefaultCatalogs()
的方法,这与名称空间无关,更多的是关于方法的静态调用,“来自类外”有点误导,请参见我的答案。您的解决方案也很好,但使用此代码,您无法在“getDefaultCatalog”之后链接另一个方法调用。
$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();