【问题标题】:Laravel - user has many galleries - gallery has many images -> how to insert in DBLaravel - 用户有很多画廊 - 画廊有很多图片 -> 如何插入数据库
【发布时间】:2020-03-27 22:28:18
【问题描述】:

用户模型:

public function galleries()
{
    return $this->hasMany(Gallery::class);
}

画廊模型:

public function images()
{
    return $this->hasMany(Image::class);
}

现在在我的图像控制器内部,我想将数据写入数据库。尝试了以下代码,但它不起作用。 (我也没有收到错误,因为它是通过 dropzone 调用的...我在 dropzone 内看到的只是一个 X 和一个带有 [object Object] 的气泡

 auth()->user()->galleries()->images()->create([
                'gallery_id' => $gallery->id,
                'filename' => $fileName,
                'filesize' => $filesize,
                'delete' => false,
            ]);

如何解决这个问题?

编辑:来自日志

如果我删除上面的行,错误就会消失..

[2020-03-27 22:52:36] local.ERROR: Unable to find file (). {"userId":1,"exception":"[object] (Intervention\\Image\\Exception\\NotReadableException(code: 0): Unable to find file (). at C:\\xampp\\htdocs\\galshare\\vendor\\intervention\\image\\src\\Intervention\\Image\\Gd\\Decoder.php:20)
[stacktrace]
#0 C:\\xampp\\htdocs\\galshare\\vendor\\intervention\\image\\src\\Intervention\\Image\\AbstractDecoder.php(324): Intervention\\Image\\Gd\\Decoder->initFromPath(false)
#1 C:\\xampp\\htdocs\\galshare\\vendor\\intervention\\image\\src\\Intervention\\Image\\AbstractDriver.php(66): Intervention\\Image\\AbstractDecoder->init(Object(Illuminate\\Http\\UploadedFile))
#2 C:\\xampp\\htdocs\\galshare\\vendor\\intervention\\image\\src\\Intervention\\Image\\ImageManager.php(54): Intervention\\Image\\AbstractDriver->init(Object(Illuminate\\Http\\UploadedFile))
#3 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Support\\Facades\\Facade.php(261): Intervention\\Image\\ImageManager->make(Object(Illuminate\\Http\\UploadedFile))
#4 C:\\xampp\\htdocs\\galshare\\app\\Http\\Controllers\\ImagesController.php(68): Illuminate\\Support\\Facades\\Facade::__callStatic('make', Array)
#5 [internal function]: App\\Http\\Controllers\\ImagesController->dropzoneStore(Object(Illuminate\\Http\\Request), Object(App\\Gallery))
#6 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Controller.php(54): call_user_func_array(Array, Array)
#7 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction('dropzoneStore', Array)
#8 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Route.php(225): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(App\\Http\\Controllers\\ImagesController), 'dropzoneStore')
#9 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Route.php(182): Illuminate\\Routing\\Route->runController()
#10 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(681): Illuminate\\Routing\\Route->run()
#11 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(128): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#12 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Middleware\\SubstituteBindings.php(41): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#13 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(167): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#14 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken.php(76): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#15 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#16 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\View\\Middleware\\ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#17 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(167): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#18 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Session\\Middleware\\StartSession.php(56): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#19 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(167): Illuminate\\Session\\Middleware\\StartSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#20 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#21 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(167): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#22 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Cookie\\Middleware\\EncryptCookies.php(66): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(167): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(683): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#26 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(658): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#27 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(624): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#28 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(613): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#29 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php(165): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#30 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#31 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode.php(63): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#39 C:\\xampp\\htdocs\\galshare\\vendor\\fruitcake\\laravel-cors\\src\\HandleCors.php(36): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#40 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#41 C:\\xampp\\htdocs\\galshare\\vendor\\fideloper\\proxy\\src\\TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#42 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(167): Fideloper\\Proxy\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#43 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#44 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php(140): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#45 C:\\xampp\\htdocs\\galshare\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php(109): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#46 C:\\xampp\\htdocs\\galshare\\public\\index.php(55): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#47 C:\\xampp\\htdocs\\galshare\\server.php(21): require_once('C:\\\\xampp\\\\htdocs...')
#48 {main}
"} 

【问题讨论】:

  • storage/logs/laravel.log 有错误吗? [object Object] 在对象被转换为字符串时出现。
  • 谢谢!用日志更新了帖子
  • 能否在dropzoneStore方法中显示代码
  • 请务必指出您要创建的图库图像。因为画廊是many 所以你需要找到一个ex. auth()->user()->galleries()->find(2)

标签: laravel insert has-many


【解决方案1】:

推荐:您有$gallery_id,所以这可行:

//get gallery object
$gallery = auth()->user()->galleries()->findOrFail($gallery->id);

//build image object
$image = new Image;
$image->filename = $fileName;
$image->filesize = $filesize;
$image->delete = false;

//assosiate image to it's gallery
$gallery->images()->save($image);

简单方法:正常插入图片,带gallery_id(这个方法不太好,因为你不知道this_gallery_id是不是this_authenticated_user):

$image=Image::create([
            'gallery_id' => $gallery->id,
            'filename' => $fileName,
            'filesize' => $filesize,
            'delete' => false,
        ]);

别忘了use App/Image; 在班级顶部。

您的代码不起作用,因为当您获得user()->galleries() 时,您会在一个对象中获得该用户的所有画廊,但是您需要一个画廊来关联新图像,

【讨论】:

  • 谢谢,我将 Image 类重命名为 Photo,因为它与使用 Image 的干预插件有冲突。现在,我重命名了所有方法,但在最后一行 ($gallery->photos()->save($image);)。我确实包含了 App/Photo,并且其中有一个名为 photos() 的方法。 user()->galleries()... 找不到画廊方法..
  • 没关系..必须重新启动工匠服务...现在一切正常...谢谢!
  • 我很乐意提供帮助 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 2013-02-28
相关资源
最近更新 更多