2015-12-30 3 views
0

У меня есть модель Cam, и для каждой камеры у меня есть папка с изображениями на сервере. Мне просто нужно получить все имена изображений в пользовательском атрибуте, но я не понимаю. Нет необходимости вызывать действия в таблице. Я пробовал расширять конструктор, но не повезло.Пользовательский атрибут (только для чтения) в Laravel 5.1

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

И где в этом коде вы получаете файлы изображений с сервера. Я вижу здесь вы используете '$ this-> images = 'kk'' в конструкторе - зачем? –

+0

Это просто для целей тестирования. Я обработаю это позже, это не проблема! – Covik

+0

как вы пытаетесь читать файлы в папке? – lagbox

ответ

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) 

, чтобы получить список изображений для выбранных КМ

В коде выше я предполагаю, что ваши кулачковые изображения в в storage/cams/{$cam_id}/ пути и у вас есть в этой папке только картинки

И теперь вы можете получить кулачки и отображать изображения для них, используя, например, этот код:

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

Конечно, если у вас есть тысячи файлов, вы, вероятно, должны хранить имена файлов в базе данных, потому что это может быть более эффективно, чем сканирование вашего диска каждый раз, чтобы получать изображения, но все зависит от использования вашего приложения.

+0

И используя этот аксессуар laravel не будет пытаться что-либо делать с изображениями в базе данных? – Covik

+0

Да, я понял. Кроме того, если if ($ images === null) будет, если ($ this-> images === null). Параметр btw $ value не имеет никакой функции, он предназначен только для предотвращения ошибок? – Covik

+0

@Covik Нет, это не так, вы правы, я исправил его, пожалуйста, посмотрите пример кода, чтобы получить изображения камеры в моем отредактированном ответе –

Смежные вопросы