Php 在我的Laravel应用程序中放置在何处以及如何调用助手函数?

Php 在我的Laravel应用程序中放置在何处以及如何调用助手函数?,php,laravel,oop,laravel-5,eloquent,Php,Laravel,Oop,Laravel 5,Eloquent,目前我有以下代码: $image = Image::find($id); $views = $image->views; $image->views = $views + 1; $image->save(); 代码位于返回特定图像视图的函数中。问题是,每当用户请求此视图时,图像视图计数都应该增加,但是,我不喜欢在返回视图的函数中使用此逻辑,因此我希望创建一个: public function updateImageViews() { logic that update

目前我有以下代码:

$image = Image::find($id);
$views = $image->views;
$image->views = $views + 1;
$image->save();
代码位于返回特定图像视图的函数中。问题是,每当用户请求此视图时,图像视图计数都应该增加,但是,我不喜欢在返回视图的函数中使用此逻辑,因此我希望创建一个:

public function updateImageViews() {
    logic that updates views;
}
在我的控制器中的某个地方(我一直在考虑将它放在我的
ArtworkController
),然后在我的函数中调用返回视图的函数


现在我想知道这是否是一个好方法。问题是,我认为这到目前为止不起作用,因为我认为不允许我在不做任何事情的情况下从另一个控制器调用函数。

对于更复杂的事情,您可以使用服务。您将业务逻辑或复杂操作放在其中。然后,您可以在其他服务或多个控制器中调用此服务-无论您需要什么

关于上面的代码,它实际上可以重构成一行,所以可能不需要将它提取到其他方法中。简化的代码如下所示:

Image::find($id)->increment('views');
但是,如果您真的想在某个地方提取代码,我将使用静态方法为这种简单的代码模型(在本例中为
Image
):

public static function updateViews($id)
{
    $image = static::find($id);
    $views = $image->views;
    $image->views = $views + 1;
    $image->save();

    return $image;
}

它到底有什么区别,是一个包含代码的函数还是代码本身在做必要的事情?哦,哇,我不知道我可以用这么少的代码来增加它。不管怎么说,如果我需要一个简单的函数,它并不完全适合放在任何模型中,我应该把它放在哪里?显然,我可以将updateViews()函数放在图像模型中,因为它是有意义的,但如果该函数类似于changeFtoC(),我将无法将其放在任何模型中,因为没有任何关系。@Bobimaru如果您只需要函数,请看一看-我已经在那里解释了如何完成
Image::whereId($id)->增量('views')
应该做同样的事情,但不首先运行selectstatement@TravisBritz这是真的,但根据应用程序的不同,最好让实际模型触发任何附加动作(例如,观察者)