سلام وقت بخیر
من میخوام اگر یوزر سابسکرایب کرده باشه یک محصول تو ماه مثلا 20 بیشتر نتونه دانلود کنه من برای اون کار یک کلاس جداگانه درست کردم به اسم file.php👇👇
<?php
namespace App\Utility;
use App\Utility\User as USER;
use App\User as UserAlias;
class File
{
public static function user_can_download($user_id)
{
if (!USER::is_user_subscribed($user_id)) {
return 'false';
}
$userItem = UserAlias::find($user_id);
$user_subscribe = $userItem->currentSubscribe()->first();
if (!$user_subscribe) {
return 'false';
}
if ($user_subscribe->subscribe_download_count >= $user_subscribe->subscribe_download_limit) {
return 'false';
}
return true;
}
}
و در درون این کلاس یک کلاس دیگه به اسم User فراخوانی کردم که وظیفه داره آیا یوزر سابسکرایب دارد یا نه
namespace App\Utility;
use App\models\subscribes;
use App\User as UserModel;
use Carbon\Carbon;
class User
{
public static function is_user_subscribed(int $user_id=null):Bool
{
$user= UserModel::find($user_id);
if (!$user) {
return false;
}
$user_subscriber=$user->CurrentSubscribe()->first();
// dd($user_subscriber);
return !empty($user_subscriber) && ($user_subscriber instanceof subscribes);
}
}
و در مدل های Userوsubscribe ریلیشن ایجاد کردم
مدل User
<?php
namespace App;
use App\models\package;
use App\models\payment;
use App\models\subscribes;
use App\models\UserPackage;
use Carbon\Carbon;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
const ADMIN=3;
const USER=1;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
public function subscribes()
{
return$this->hasMany(subscribes::class,'subscribe_user_id');
}
public function CurrentSubscribe()
{
return $this->subscribes()->where('subscribe_expired_at','>=',Carbon::now());
}
}
مدل subscribe :
<?php
namespace App\models;
use Illuminate\Database\Eloquent\Model;
class subscribes extends Model
{
//
protected $table='subscribers';
protected $primaryKey='subscribe_id';
protected $guarded=['subscribe_id'];
public $timestamps=false;
protected $dates=[
'subscribe_expired_at'
];
/* const CREATED_AT='subscribe_created_at ';
const UPDATED_AT = 'subscribe_expired_at';*/
public function user()
{
return $this->belongsTo(subscribes::class,'subscribe_user_id');
}
}
و این کد قسمت تابع دانلود از FileController هستش :
public function download(Request $request, int $file_id)
{
$CurrentUser = Auth::user();
if (!FileUtility::user_can_download($CurrentUser->id)) {
return redirect()->route('frontend.File.access');
}
$fileItem = file::find($file_id);
if (!$fileItem) {
return redirect()->back()->with('fileError', 'فایل درخواستی معتبر نمی باشد');
}
$basePath = public_path('file\\');
$filePath = $basePath . $fileItem->file_name;
$Res = $CurrentUser->CurrentSubscribe()->first();
$Res->increment('subscribe_download_count');
return response()->download($filePath);
}
(file.php با اسم FileUtility فراخوانی کردم )
با تابع increment
باید subscribe_download_count
اضافه بشه ولی به کالوم subscribe_download_count
در دیتابیس آپدیت نمیشه
اما دانلود انجام میشه !
به متین طیبی نیا کمک کنید تا مشکل خودش را حل کند؛ اینطور میتوانیم با هم پیشرفت کنیم.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟