我无法解决模型事件。
目前我有以下
use Illuminate\Database\Eloquent\SoftDeletingTrait;
class ProjectTwitterStatus extends Eloquent {
use SoftDeletingTrait;
protected $dates = ['deleted_at'];
protected $table = 'project_twitter_statuses';
protected $guarded = array('id');
public function twitterStatus() {
return $this->belongsTo('TwitterStatus');
}
public function twitterStatusHashtag() {
return $this->hasMany('TwitterStatusHashtag','twitter_status_id','twitter_status_id');
}
public function project() {
return $this->belongsTo('Project');
}
public static function boot()
{
parent::boot();
static::deleting(function($model)
{
echo 'deleting status';
});
}
}
删除是在帮助程序类中启动的:
public static function deleteStatus($input_ids, $project) {
// Make sure ids are in an array
$twitterStatusIds = (!is_array($input_ids) ? array($input_ids) : $input_ids);
foreach($twitterStatusIds as $twitterStatusId)
{
ProjectTwitterStatus::where('twitter_status_id', '=', $twitterStatusId)
->where('project_id','=',$project->id)
->delete();
}
// Forget the cache variable
Cache::forget('twitter-dashboard-statistics-'.$project->id);
return true;
}
删除工作正常,但不会触发模型事件。 “删除状态”的回显是一个占位符来显示被触发的事件,我尝试了几个占位符,dd($ model)或创建一个无效的文件。所以我假设事件没有被触发。对此事有何强硬态度?
答案 0 :(得分:0)
我知道这不是一个完美的答案,但是我通过使用它解决了类似的问题:
Event::listen('eloquent.creating: ProjectTwitterStatus', function($model)
答案 1 :(得分:0)
我在使用介入\图像包时再次遇到了这个问题。我将其添加到名称为ImageEditor
而不是Image
的别名数组中。然后我创建了一个使用ImageEditor的类Image
。在干预\图像包的次要更新中,我的事件停止了触发。我尝试编写类的完整路径,使用static::
而不是Image::
,但没有一个工作。
现在我将别名更改回Image
并将我的Image
类重命名为其他内容,事件再次开始触发。
答案 2 :(得分:0)
我有类似的问题。我用过:
model0hasmanyrelation()->delete()
当记录被删除(软)时,模型的事件没有触发。解决方案是使用:
model0hasmanyrelation->each(function($model0){$model0->delete()});
答案 3 :(得分:0)
你应该改变这个:
foreach($twitterStatusIds as $twitterStatusId)
{
ProjectTwitterStatus::where('twitter_status_id', '=', $twitterStatusId)
->where('project_id','=',$project->id)
->delete();
}
到此:
foreach($twitterStatusIds as $twitterStatusId)
{
ProjectTwitterStatus::where('twitter_status_id', '=', $twitterStatusId)
->where('project_id','=',$project->id)
->first()
->delete();
}
这样一个模型对象实际上正在加载并且事件有机会发射。在没有delete()
Eloquent的情况下调用first()
只需通过Builder执行直接SQL查询。