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);
}
当然,如果您有数千个文件,您可能应该将文件名存储在数据库中,因为这可能比每次扫描磁盘以获取图像更有效,但一切都取决于您的应用程序使用情况。
我有摄像头模型,对于每个摄像头,我在服务器上都有一个包含图像的文件夹。我只需要获取自定义属性中的所有图像名称,但我不明白。无需在 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);
}
当然,如果您有数千个文件,您可能应该将文件名存储在数据库中,因为这可能比每次扫描磁盘以获取图像更有效,但一切都取决于您的应用程序使用情况。