我想自动将创建人
和修改人
字段添加到Laravel 4中数据库表的每次插入/更新中,无论我使用的是Eloquent还是Query Builder。但是,并非所有表都有这些字段,因此任何解决方案都必须在添加之前检查这些列是否存在。
我已经扩展了类,并编写了一个覆盖方法,以便为保存的每个记录添加一些额外的元数据字段。
这很好,只是如果我使用查询生成器执行插入,那么这将被忽略。查看模型
类,似乎数据库操作实际上是使用查询生成器完成的。
我已经看了一下照明\数据库\查询\生成器
模型,看起来我可能可以为插入()
和更新()
编写覆盖方法。
这是一种为每次插入/更新执行某些任务的明智方法,还是以后我会遇到麻烦?
在Laravel中,如果您希望在每次保存/更新时从单个点调用单个方法,而不在每个扩展模型中进行任何其他更改,则可以为有说服力的事件使用自定义侦听器。正如文件所述,这只能针对每个型号进行。但创建自定义侦听器允许访问任何模型中的任何事件。
只需在下面的EventServiceProvider
中的start()
方法中添加一个侦听器,并相应地进行修改。
Event::listen(['eloquent.saving: *', 'eloquent.creating: *'], function(){
//your method content
//returning false will cancel saving the model
});
请注意,通配符用于匹配任何模型。有关事件的更多信息,请参阅留档。
决不能重写save方法来重写和添加函数性。
相反,您必须使用eloquent提供的模型事件功能来实现这一点。
简单地说,您必须为您的模型定义一个保存事件,以覆盖/设置/检查模型将要保存的数据。
将一个简单示例放入用户模型类:
//Executed when loading model
public static function boot()
{
parent::boot();
User::creating(function($user){
$user->value1 = $user->value2 +1;
});
}
更多信息:http://four.laravel.com/docs/eloquent#model-事件
补充上述答案。你可以这样做。
在应用程序/模型中创建一个名为BaseModel的类。php扩展\雄辩
class BaseModel extends \Eloquent{
public static function boot()
{
parent::boot();
static::creating(function($model)
{
//change to Auth::user() if you are using the default auth provider
$user = Confide::user();
$model->created_by = $user->id;
$model->updated_by = $user->id;
});
static::updating(function($model)
{
//change to Auth::user() if you are using the default auth provider
$user = Confide::user();
$model->updated_by = $user->id;
});
}
}
然后在您的单个模型类中,您需要扩展BaseModel而不是\Eloquent
class Product extends BaseModel {
protected $table = 'product';
//Booting the base model to add created_by and updated_by to all tables
public static function boot()
{
parent::boot();
}
}
现在,无论何时保存或更新模型,“创建人”和“更新人”字段都将自动更新。
注意:这只在通过雄辩完成保存或更新时有效。对于查询生成器,您可以有一个通用方法来获取和追加created_by和update_by列更新。
在有说服力的ORM上,是否有一种较短的方法在Laravel中插入数据? 目前我正在这样做: 就像你看到的,所有的列都像属性一样命名。 我知道您可以将对象与all()函数和fetch()一起使用。但是我从另一个对象(soap服务器)获取数据。 有没有办法转换这个?也许在模型上?
使用Laravel的雄辩模型,我如何在访问对象时更新对象的数据,如果它已经 我有另一个API,我想确保数据是半最新的,但想缓存在我的数据库中的数据,而不是调用他们的API每次页面加载。 是否有Laravel在每次加载模型时调用的函数,我可以检查30天是否已经过去,调用API加载新数据,然后保存它?
如何使用雄辩的ORM在Laravel中执行批量数据库插入? 我想在拉威尔完成这一点:https://stackoverflow.com/a/10615821/600516 但是我得到了以下错误。 SQLSTATE[HY093]:无效参数编号:混合命名参数和位置参数。
如何使用laravel雄辩的ORM关系在多个表中发出一个插入请求。即 表1:用户 id 姓名 电子邮件 表2:员额 id 表3:图像 id 用户id 邮政id 图像名称 关系 表id引用了其他两个表中的 表与
假设我们正在使用Laravel的查询生成器: 我正在寻找一个等效的SQL: 当我必须键入大量select和WHERE(或者通常在select的列alias中包含别名,并且它在结果数组中使用)时,这将特别有用。如果没有任何表别名,我需要输入更多的内容,所有内容的可读性都会降低。在laravel文档中找不到答案,有什么想法吗?
问题内容: 我们如何使用雄辩的ORM在Laravel中执行批量数据库插入? 问题答案: 您可以使用。 例如: