在Laravel Nova的数据透视表上显示文件字段的数据.

问题描述 投票:0回答:1

在用户提交的数据可以上线之前,和管理员需要验证提供的数据。这些数据存储在数据透视表specialism_user中。

specialism和用户Resource上都有一个BelongsToMany::make字段。

class Specialism extends Resource
{
  public function fields(Request $request)
  {
    return [
        BelongsToMany::make('Gebruikers', 'Users', User::class)
            ->fields(function() {
              return [
                  Boolean::make('Goedgekeurd', 'approved'),
                  File::make('Diploma', 'diploma'),                   
                  File::make('Cijferlijst', 'cijferlijst'),                      
                  File::make('Overige', 'certificate'),                      
                  Date::make('Geldig', 'valid_until'),                      
                  Date::make('Diploma', 'earned_at'),                      
                  Text::make('Opmerking', 'note'),                      
              ];
            }),
    ];
  }
}
class User extends Resource
{
  public function fields(Request $request)
  {
    return [
        BelongsToMany::make('Registers', 'Specialisms', Specialism::class)
            ->hideFromIndex()
            ->fields(function() {
              return [
                  Boolean::make('Goedgekeurd', 'approved'),                      
                  File::make('Diploma', 'diploma'),                   
                  File::make('Cijferlijst', 'cijferlijst'),                      
                  File::make('Overige', 'certificate'),                      
                  Date::make('Geldig', 'valid_until'),                      
                  Date::make('Diploma', 'earned_at'),                      
                  Text::make('Opmerking', 'note'),                      
              ];
            }),
    ];
  }
}

而这个数据其实是显示在资源下面的。附加资源但文件字段只显示一个破折号,而不是真实文件的链接。

查看数据的另一个选项是眼睛图标,但这只是显示专业资源,如果你是在用户资源上,反之亦然,而不是实际的specialism_user。

也许是路径的存储方式,但如果我点击编辑按钮,路径似乎就在那里。这就是它的存储方式。

    if (request()->hasFile('certificaat')) {
        $path = request()->file('certificaat')->store("other/{$user->id}", "public");
        $connect->certificate = $path;
    }

    if (request()->hasFile('diploma')) {
        $diploma = request()->file('diploma')->store("diplomas/{$user->id}", "public");
        $connect->diploma = $diploma;
    }

    if (request()->hasFile('cijferlijst')) {
        $cijferlijst = request()->file('cijferlijst')->store("cijferlijsten/{$user->id}", "public");
        $connect->cijferlijst = $cijferlijst;
    }

    if ($connect->isDirty()) {
        $connect->save();
    }

最后是这些模型

class User extends Authenticatable implements MustVerifyEmail
{
  public function specialisms()
  {
    return $this
        ->belongsToMany(Specialism::class)
        ->using(UserSpecialism::class, 'specialism_user')
        ->withPivot(['valid_until','earned_at', 'note', 'approved', 'diploma', 'cijferlijst', 'certificate', 'school_id', 'id'])
        ->withTimestamps();
  }
}
class Specialism extends Model
{
  public function users()
  {
    return $this
        ->belongsToMany(User::class)
        ->using(UserSpecialism::class, 'specialism_user')
        ->withPivot(['valid_until','earned_at', 'note', 'approved', 'diploma', 'cijferlijst', 'certificate', 'school_id', 'id'])
        ->withTimestamps();
  }
}

我希望有人能给我指点迷津 因为我感觉我在兜圈子尝试同样的东西已经很久了 :D)

laravel-5.8 laravel-nova
1个回答
0
投票

您是否尝试过 displayUsing 方法 (https:/nova.laravel.comdocs3.0resourcesfields.html#字段解析-格式化。)上 File 场?

BelongsToMany::make('Registers', 'Specialisms', Specialism::class)
    ->fields(function () {
        return [
            // ...
            File::make('certificate')
                ->displayUsing(function ($certificatePath) {
                    return '<a href="' . $certificatePath . '" target="_blank">Open file</a>';
                })->asHtml(),
            // ...
        ];
    })
© www.soinside.com 2019 - 2024. All rights reserved.