محسن مهری
4 سال پیش توسط محسن مهری مطرح شد
10 پاسخ

تعریف متغیر global برای جایگزین session

درود دوستان -
میخاستم توی session یک query رو ذخیره کنم اما گویا نمیشه و با خطای زیر مواجه میشم :

 Serialization of 'PDO' is not allowed 

حالا جایگزین مناسب به نظرم تعریف یک متغیر کاملا global هستش که از اول تا اخر اجرا قابل دسترس باشه،
این متغیر رو توی کلاس مادر Controller ( همین نام) تعریف کردم اما گویا با هر بار فراخوانی کلاس این متغیر تازه ساخته میشه و null هستش
سوالم اینه :

  1. تعریف متغیر همگانی که همیشه قابل دسترس باشه چطوریه ؟
  2. راه حل جایگزین خوبی دارین ؟
    @hesammousavi

ثبت پرسش جدید
محسن مهری
تخصص : برنامه نویس back-end با زبان...
@mohsen.mehri6101 4 سال پیش مطرح شد
محمد امیری
تخصص : backend coder
@mohammadeng3731 4 سال پیش مطرح شد
1

سلام.
یک helper تعریف کن محاسباتو داخل اون انجام بده و مقدارو داخلش برگردون و هرجا خواستی صداش بزن مثل کاری که خود لاراول برای session ها کرده


woz
تخصص : fan of open source world
@wozniak 4 سال پیش مطرح شد
1

@mohsen.mehri6101
متغیر همگانی که شما می فرمایید بعد از flow Request پاک میشه و در دسترس نخواهد بود.
برای این کار باید از دیتابیس استفاده کنید و ذخیره سازی انجام بدید.
کوری رو به صورت استرینگ و یا array ذخیره کنید


محسن مهری
تخصص : برنامه نویس back-end با زبان...
@mohsen.mehri6101 4 سال پیش مطرح شد
0

@wozniak
درود - آقا این کار هم متاسفانه نشدنیه - یعنی شدنیه اما در صورتی که اخر query ام تابع get رو فراخونی کنم، که در این صورت میشه یک ارایه نه یک کوئری
و همچنین حجمش زیاده و کلا هم به درد من نمیخوره
اما این که گفتین به صورت استرینگ ذخیره کن این کار رو چطوری انجام بدم ؟ یعنی ذخیره یک کوئری به صورت یک استرینگ؟؟


woz
تخصص : fan of open source world
@wozniak 4 سال پیش مطرح شد
1

@mohsen.mehri6101
شما میخواهید نتیجه کوری رو ذخیره کنید؟ ( یعنی دیتا رو) یا خود کوری رو؟


محسن مهری
تخصص : برنامه نویس back-end با زبان...
@mohsen.mehri6101 4 سال پیش مطرح شد
0

@wozniak
درود - خود کوئری رو - چون در واقع توی یک صفحه میخام دکمه (جدیدترین -قدیمی ترین- بیشترین فلان) هر کدوم رو ز، بعد روی اون کوئری یک مرتب سازی انجام بدم

//like this ...
$query->orderBy('id','desc')->paiginate(12);

woz
تخصص : fan of open source world
@wozniak 4 سال پیش آپدیت شد
1

@mohsen.mehri6101
خب البته این عبارت که شما نوشتین کوری نمیده بهتون. بلکه یک object از query builder شاید بده
شما می تونید با chain کردن متد toSql() کوری رو بگیرید و یا کوری رو خودتون دستی بنویسید و این کوری یک استرینگ سادس و اونو ذخیره کنید.
اشتباه میکنم صحیح فرمایید


محسن مهری
تخصص : برنامه نویس back-end با زبان...
@mohsen.mehri6101 4 سال پیش مطرح شد
0

@wozniak
درود جناب - بله بسیار متدی خوبی رو معرفی کردین واقعا عالیه - اما خب چطوری دوباره باید از اون استرینگ استفاده کنم؟
منظورم اینه که یک کوئری رو با این تابع تبدیل به یک استرینگ کردم - اما حالا با چه تابعی بتونم اجراش کنم ؟

پوزش میطلبم اگه سوالاتم زیاد شد


محسن مهری
تخصص : برنامه نویس back-end با زبان...
@mohsen.mehri6101 4 سال پیش مطرح شد
0

@wozniak
@mohammadeng3731
دوستان داستان به اینجا رسید که من نمیتونستم یک object از query builder (به قول شما) ذخیره کنم اما بعد از فراخونی متد get روی کوئریم چون تبدیل به یک آرایه میشه، میتونم توی session/cache ذخیره اش کنم، به هرحال الان مشکلم اینه که بعد از اینکه اطلاعات رو از کش استخراج کردم با فراخونی یک تابع collectرویش اون رو به یک کالکشن تبدیل میکنم اما بعدش هر چی میخام از توابع sort /sorby/sortbydesc استفاده کنم جواب نمیده ؟!!!ارور نمیده ولی درست هم کار نمیکنه؟ چرا واقعا ؟


woz
تخصص : fan of open source world
@wozniak 4 سال پیش مطرح شد
1

@mohsen.mehri6101
شما فرمودید که میخواهید sql ذخیره کنید بنده هم روش رو خدمتتون عرض کردم.
اما در کل نمیدونم این کار برای چی هست.
اما ظاهرا راه حل درستی به نظر نمیرسه ( البته بنده کلیات مساله رو نمیدونم )


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام