Laravel 5.1 中的自定义属性(只读)

Custom attribute (read-only) in Laravel 5.1

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

<?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');
    }
}

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

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

protected $images= null;

现在是你的新方法:

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

现在对于每个 Cam,您可以使用:

dd($cam->images)

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

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

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

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

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