在 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 进行更高级的数据库查询