我正在尝试测试boot()static::deleting方法,该方法在通过Eloquent删除模型时应该触发。
tinkerApp\User::find(6)中的命令-
如果我尝试使用
App\User::其中('id',6)-
这是整个用户模型
<?php
namespace App;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use Notifiable;
public function profile() {
return $this->hasOne(Profile::class);
}
public function posts() {
return $this->hasMany(Post::class);
}
public function tempUploads() {
return $this->hasMany(TempUploads::class);
}
protected static function boot() {
parent::boot();
static::created(function ($user) {
$user->profile()->create(['id' => $user->username, 'avatar' => '/storage/avatars/edit-profile.png']);
mkdir(public_path() . "/storage/images/" . $user->username , 0755);
// $data = [
// 'user_id' => $user->username
// ];
// Mail::to($user->email)->send(new WelcomeMail($data));
});
static::deleting(function ($user) {
$user->posts->delete();
if ($user->profile->avatar != '/storage/avatars/edit-profile.png') {
if ($user->profile->cover != NULL && $user->profile->cover != '') {
$oldAvatar = $_SERVER['DOCUMENT_ROOT'] . $user->profile->avatar;
$oldCover = $_SERVER['DOCUMENT_ROOT'] . $user->profile->cover;
if (is_file($oldAvatar) && is_file($oldCover)) {
unlink($oldAvatar);
unlink($oldCover);
} else {
die("Грешка при изтриване на стария файл. File does not exist in profile deleting method.");
}
}
}
$user->profile->delete();
});
}
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'username', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
}
我已经花了几个小时在谷歌上寻找可能的解决方案,但还没有找到。
如何在触发引导删除方法时正确删除用户模型?
我认为它是这样工作的,更简单。
$user->posts()->each->delete();
您可以通过仅使用一个查询来删除所有帖子来优化lagbox的答案。在他的例子中,他正在对附加到用户的每个帖子执行删除
查询。
对于单个delete
查询,请直接使用关系的查询生成器:
$user->posts()->delete();
或者使用集合的pulk
方法和单独的查询:
Post::where('id', $user->posts->pluck('id'))->delete();
在删除
侦听器中,您试图删除其他内容,这是导致错误的集合。
$user-
// calling `delete()` on a Collection not a Model
// will throw the error you see
$user->posts->delete();
// iterate through the Collection
foreach ($user->posts as $post) {
$post->delete();
}
附带说明:您不能对模型和查询批量执行任何操作,并且可以触发事件。所有Model事件都基于Model的单个实例。直接查询绕过Model。
我正在使用Laravel 5.8,在这个项目中,我想从数据库中的一个表中删除一些数据,所以我在Blade上对其进行了编码: 这是路线: 这是WalletController的控制器销毁方法: 但是一旦我运行这个,我就会收到这个错误消息: 方法照亮\数据库\雄辩\集合::de不存在。 那么这里出了什么问题?我如何解决这个问题?
我用的是拉威尔5.8 我有一个封闭的问题: $user=user::get(); 然后这不起作用: $用户- 出现这种情况: 方法照亮\数据库\雄辩\集合::跳过不存在。 告诉我我应该做些什么来实现这一目标而不出错?
嗨,我正在学习laravel。我使用雄辩的ORM删除方法,但我得到了不同的结果。不是真的或假的,而是空的。我设置了一个资源路由,在UsersController中有一个销毁方法。 但是我总是得到一个响应{“status”:“0”,“msg”:“failed”},数据库中的记录被删除。 然后我使用dd($res)。它在页面中显示null。 但是从课程中我学习到它返回一个布尔值true或false。
我有一个非常奇怪的问题。当我提交表单时,它会引发服务器端验证错误。 BadMethodCallException 方法[validation必需]不存在。 我的控制器: 控制器在方法
最直接的方法,通过id删除用户 @At public Object delete(@Param("id")int id, @Attr("me")int me) { if (me == id) { return new NutMap().setv("ok", false).setv("msg", "不能删除当前用户!!"); }
全部显示 Delete 方法应用于 DocumentProperty 对象的情形。 删除自定义的文档属性。 expression.Delete expression 必需。该表达式返回上面对象之一。 说明 不能删除内置的文档属性。 Delete 方法应用于 AnswerWizardFiles 对象的情形。 从集合中删除指定对象。 expression.Delete(FileName) expres