【问题标题】:Call a custom model method from controller laravel4从控制器 laravel4 调用自定义模型方法
【发布时间】:2023-03-03 00:01:01
【问题描述】:

我有一个这样的模型:

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

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

【问题讨论】:

    标签: php model controller laravel-4 eloquent


    【解决方案1】:

    对您的方法进行如下更改:

    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 类,实际上是一个映射到 'Illuminate\Support\Facades\Event'Facade

    【讨论】:

    • 感谢您的响应,但错误仍然存​​在: Symfony \ Component \ Debug \ Exception \ FatalErrorException 调用未定义的方法 Illuminate\Events\Dispatcher::searchEvents() 我是否需要对我的 laravel 进行任何额外的配置4个项目?
    • 不,它应该可以工作,你正确使用了这段代码吗?
    • 你不应该使用Event作为你的类/模型名。
    • 是的,我复制并粘贴了代码。顺便说一句,$search_criteria 是一个数组,这就是我使用 whereIn... 的原因
    • 为什么我不应该使用那个名字?
    【解决方案2】:

    看看app.php

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

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

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

    然后:

    MyEvent::create();
    

    【讨论】:

      猜你喜欢
      • 2015-10-19
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      相关资源
      最近更新 更多