首页 > 解决方案 > 如何在 laravel 中添加媒体文件?

问题描述

用户可以注册/注册为求职者或雇主。如果他是求职者,他可以在创建个人资料页面上创建个人资料。在表单上,​​它们是具有文件类型的 4 个输入,以及其他输入。请参阅下面的屏幕截图。 在此处输入图像描述

我有一个名为 job_seeker_profiles 的表,其中有几列,但只有这 4 列与我的问题相关。resume_id、video_one_id、video_two_id、video_three_id

我还有 2 个表格、简历和视频,每个都有一个名为“文件”的列。这是有效的,文件路径被插入到数据库中。

在我的公共文件夹中,我创建了 2 个目录简历和视频。这是我要存储文件的地方。这部分也有效,当我只上传简历(没有视频,它们是可选的)并单击创建配置文件时,该文件出现在我的公共文件夹中的 /resumes 文件夹中。

问题是,在 job_seeker_profiles 表的 resume_id 列中,我将此值插入到我的数据库“/Applications/XAMPP/xamppfiles/temp/phpx6Dmr”中,而不是从简历表中插入文件的 id。

我觉得可能是我的人际关系有问题?

这是我的代码。

AdminJobSeekerProfilecontroller.php 文件:

public function store(JobSeekerCreateRequest $request)
    {
        if($file = $request->file('resume_id')) {

            $name = time() . $file->getClientOriginalName();

            $file->move('resumes', $name);

            $resume = Resume::create(['file'=>$name]);

            $input['resume_id'] = $resume->id;

        }

        $input = $request->all();

        if($file = $request->file('video_one_id')) {

            $name = time() . $file->getClientOriginalName();

            $file->move('videos', $name);

            $video = Video::create(['file'=>$name]);

            $input2['video_one_id'] = $video->id;

        }

        $input2 = $request->all();

        if($file = $request->file('video_two_id')) {

            $name = time() . $file->getClientOriginalName();

            $file->move('videos', $name);

            $video = Video::create(['file'=>$name]);

            $input3['video_two_id'] = $video->id;

        }

        $input3 = $request->all();

        if($file = $request->file('video_three_id')) {

            $name = time() . $file->getClientOriginalName();

            $file->move('videos', $name);

            $video = Video::create(['file'=>$name]);

            $input4['video_three_id'] = $video->id;

        }

        $input4 = $request->all();

        JobSeekerProfile::create($input, $input2, $input3, $input4);

        return redirect('/admin/job-seeker/profile/create');
    }

Resume.php 模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Resume extends Model
{

    protected $uploads = '/resumes/';

    protected $fillable = ['file'];

    //create an accessor
    public function getFileAttribute($resumes){

        return $this->uploads . $resumes;

    }

}

JobSeekerProfile.php 模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class JobSeekerProfile extends Model
{

    protected $dates = ['date_of_birth'];

    protected $fillable = [

        'user_id',
        'photo_id',
        'resume_id',
        'video_one_id',
        'video_two_id',
        'video_three_id',
        'first_name',
        'last_name',
        'email',
        'full_or_part_time',
        'additional_skills',
        'file'

    ];

    public function user(){

        return $this->belongsTo('App\User');

    }

    public function resume(){

        return $this->belongsTo('App\Resume');

    }

    public function video(){

        return $this->belongsTo('App\Video');

    }

}

附带说明一下,我知道我应该将视频文件存储在像 amazon s3 这样的东西上,但我现在想让它以这种方式工作。如果您对 Laravel 和在基于云的系统上托管文件有任何建议,那也很棒。

标签: phplaravelfiledirectorylaravelcollective

解决方案


谢谢特波伊卡。这现在对我有用:

$input = $request->all();

        $user = Auth::user();

        if($file = $request->file('resume_id')) {

            $name = time() . $file->getClientOriginalName();

            $file->move('resumes', $name);

            $resume = Resume::create(['file'=>$name]);

            $input['resume_id'] = $resume->id;

        }

        $user->jobseekerprofile()->create($input);

        return redirect('/admin/job-seeker/profile/create');

推荐阅读