在 Laravel 中使用 Eloquent 在模型中应用语句

Posted

技术标签:

【中文标题】在 Laravel 中使用 Eloquent 在模型中应用语句【英文标题】:Applying statements in Models with Eloquent in Laravel 【发布时间】:2021-07-07 07:45:34 【问题描述】:

我正在使用 Laravel 5.1,我正在尝试将使用 QueryBuilder 进行的所有查询转换为 Eloquent。

关键是在特定的视图中,我需要在前面执行一些“set ansi statements”。

现在我可以在我的 Controller 中执行以下操作来获取一些记录:

 $db = DB::connection('my_connection_1');
 $db->statement('SET ANSI_WARNINGS ON');
 $db->statement('SET ANSI_PADDING ON');
 $db->statement('SET ANSI_NULLS ON');

 $select = $db->select('SELECT * FROM name_of_table/view');

这很好用,但我不喜欢那样工作,所以我创建了一个模型来访问这个看起来像这样的表/视图:

namespace App;

use Illuminate\Database\Eloquent\Model;

class NameFromModel extends Model


    protected $connection = 'my_connection_1';

    protected $table = 'name_of_table/view';


所以,现在,在 Controller 中,代码应该如下所示:

$select = NameFromModel::get();

但显然,需要一些额外的代码才能在此模型中添加所需的语句。

我不想在所有查询中应用这些语句,只是在这个模型中。

如果您能提供任何帮助,我将不胜感激。

提前致谢,

【问题讨论】:

【参考方案1】:

您可以在模型中调度目标事件时执行这些语句,可以从laravel 5.1 eloquent events 读取。 例如对于您的 AppServiceProvider 中的 creating 事件:

class AppServiceProvider extends ServiceProvider

    public function boot()
    
        \App\NameFromModel::creating(function () 
            \DB::connection('my_connection_1');
            $db->statement('SET ANSI_WARNINGS ON');
            $db->statement('SET ANSI_PADDING ON');
            $db->statement('SET ANSI_NULLS ON');
        );
    

【讨论】:

这很令人困惑,因为这似乎就是这个解决方案,只有当你从这个模型创建(更新、保存、删除或恢复......)记录时。但实际上,我只需要做一个选择。无论如何,我看不到您尝试为我提供的解决方案。

以上是关于在 Laravel 中使用 Eloquent 在模型中应用语句的主要内容,如果未能解决你的问题,请参考以下文章

在 Eloquent 查询/Laravel 5.2 中使用变量

Laravel:在 API 测试中使用 Eloquent 模型

如何在 Laravel 5.8 中使用 Eloquent 进行查询?

在 Laravel 中使用 Eloquent 进行更高级的数据库查询

如何使用 Eloquent 在 Laravel 中开始查询?

如何在 laravel 5 中使用 Eloquent 更新数据透视表