【问题标题】:Custom attribute (read-only) in Laravel 5.1Laravel 5.1 中的自定义属性(只读)
【发布时间】:2015-12-30 20:30:11
【问题描述】:

我有凸轮模型,对于每个凸轮,我在服务器上都有一个包含图像的文件夹。我只需要在自定义属性中获取所有图像名称,但我不明白。无需在表中调用操作。我尝试扩展构造函数,但没有运气。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Cam extends Model
{
    protected $table = 'cams';
    protected $guarded = 'id';
    public $timestamps = false;
    public $images = null;

    public function __construct($attributes = array())
    {
        parent::__construct($attributes);

        $this->images = 'kk';
    }

    public function getVideosAttribute($value) {
        return explode(',', $value);
    }

    public function city() {
        return $this->belongsTo('App\City');
    }
}

【问题讨论】:

  • 在这段代码中,您从服务器获取图像文件的位置。我在这里看到你在构造函数中使用$this-&gt;images = 'kk' - 有什么用?
  • 仅供测试之用。以后我会处理的,没问题!
  • 您是如何尝试读取文件夹中的文件的?
  • 为什么这很重要?每个 cam 都有以其 id 命名的文件夹。里面是存储的图像。

标签: laravel model eloquent laravel-5.1 accessor


【解决方案1】:

我会选择这样的东西(我假设您的 $images 变量仅用于测试,它不是数据库表中的列)。

您可以添加到您的Cam 模型:

protected $images= null;

现在你的新方法:

public function getImagesAttribute($value) {
    if ($this->images === null) {
       $this->images = glob(storage_path('cams/'.$this->id.'/*'));
    }
    return $this->images;
}

现在您可以使用每个凸轮:

dd($cam->images)

获取所选摄像头的图像列表

在上面的代码中,我假设您的 cam 图像位于 storage/cams/{$cam_id}/ 路径中,并且您在该文件夹中只有图片

现在您可以使用以下代码获取摄像头并为它们显示图像:

$cams = Cams::all(); 
foreach ($cams as $cam) 
{
    echo implode("\n", $cam->images); 
}

当然,如果您有数千个文件,您可能应该将文件名存储在数据库中,因为这可能比每次扫描磁盘以获取图像更有效,但一切都取决于您的应用程序使用情况。

【讨论】:

  • 并且通过使用这个访问器,laravel 不会尝试对数据库中的图像做任何事情?
  • 是的,我明白了。此外,如果 ($images === null) 应该是 if ($this->images === null)。 btw $value 参数没有任何功能,只是为了防止错误?
  • @Covik 不,不会的,你是对的,我已修复它,请查看示例代码以在我编辑的答案中获取 cam 图像
猜你喜欢
  • 2010-11-14
  • 2016-09-20
  • 1970-01-01
  • 2021-03-24
  • 1970-01-01
  • 2015-12-07
  • 1970-01-01
  • 2011-12-07
相关资源
最近更新 更多