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

时间:2015-12-30 20:30:11

标签: laravel model eloquent laravel-5.1 accessor

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

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

1 个答案:

答案 0 :(得分: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;
}

现在每个Cam都可以使用:

dd($cam->images)

获取所选Cam的图像列表

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

现在你可以使用例如以下代码获取凸轮并显示图像:

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

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