从控制器laravel4调用自定义模型方法

时间:2014-05-24 22:56:11

标签: php model controller laravel-4 eloquent

我有一个这样的模型:

class Event extends Eloquent

    {
        protected $softDelete = true;
        public function scopeSearchEvents($search_criteria)
        {
            return Event::whereIn('title',$search_criteria)
                            ->orWhereIn('description',$search_criteria)
                            ->whereApproved('1')
                            ->orderBy('event_date','desc')
                            ->get();
        }
    }

我从控制器那里调用它:

$data = Event::search($search_criteria);

但它给出了这个错误:

Symfony \ Component \ Debug \ Exception \ FatalErrorException
Call to undefined method Illuminate\Events\Dispatcher::search()

从控制器调用自定义模型方法的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

如下所示更改您的方法:

public function scopeSearchEvents($query, $search_criteria)
{
    return $query->whereIn('title', $search_criteria)
                 ->orWhereIn('description', $search_criteria)
                 ->whereApproved('1')
                 ->orderBy('event_date','desc');
}

然后将其称为searchEvents而不是search

// Don't use Event as your model name
$data = YourModel::searchEvents($search_criteria)->get();

另外请确保您要使用whereIn代替where('title', 'LIKE', "% $search_criteria")等。

更新

您应该将模型名称从Event更改为其他任何内容,因为Laravel具有核心Event类,实际上是Facade,其映射到{ {1}}。

答案 1 :(得分:0)

查看 app.php

'aliases' => array(
        ...
        'Event'=> 'Illuminate\Support\Facades\Event',
        ...
);

" Event" 被定义为别名。这就是 Event 调用" Illuminate \ Support \ Facades \ Event" 的原因。 现在,如果您想使用事件模型而不键入命名空间来调用方法,请创建一个别名,如:

'MyEvent' => 'App\Models\Event',

然后:

MyEvent::create();