2013-07-11 2 views
2

Я разрабатываю пакет в среде workbench. У меня есть модель, какМодель Laravel, получающая экземпляры класса

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

Вы попробовали что-то вроде 'Vendor \ Webshop \ Models \ Catal og :: getDefaultCatalogs() ' –

+0

Это было не так много об именах, больше о статическом вызове метода,« извне класса »было немного обманчивым, sry – pfried

ответ

3

Laravel в такого рода поведение - это вызов «Запрос Прицелы» 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(); 
+0

это полезно знать и быть полезным для меня, THX – pfried

0

Я просто добавил метод как статический метод к модели Eloquent, и он отлично работает. Если у кого-нибудь есть замечания по этому поводу, дайте мне знать. Красноречивым поддержка

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

См. мой ответ. Ваше решение также прекрасное, но с помощью этого кода вы не можете перехватывать вызовы других методов после «getDefaultCatalog». – Andreyco

Смежные вопросы