راکت
حل شده

ابهام در کش کردن روابط لاراول و استفاده از fresh

3 پاسخ

سلام دوستان
من یه تیکه کد نوشتم که مربوط به تست یک فیچر هست. ولی به یه ابهامی برخورد کردم

        $project = ProjectFactory::withTasks(1)->create();

        $this->actingAs($project->owner)
            ->patch($project->tasks[0]->path(), [
                'body' => 'Changed',
                'completed' => true
            ]);

        $this->assertCount(3, $project->activity);

        $this->patch($project->tasks[0]->path(), [
            'body' => 'Changed',
            'completed' => false
        ]);

        $project->refresh();

        $this->assertCount(4, $project->activity);

من اگر خط $project->refresh(); را پاک کنم، این تست ارور میده چون رابطه بالا کش شده و سراغ همون Activity های مدل قبلی که از دیتابیس خونده شده میره.
من این مفهموم کش شدن روابط رو متوجه نمیشم که چه موقع این کش شدن اتفاق میوفته. میشه لطفا در این رابطه و اصطلاح اون یخورده دقیق تر توضیح بدید. اگر هم لینکی از داکیومنت لاراول یا منابع دیگه هست که این مفهوم رو توضیح داده، ممنون میشم برام بفرستید چون خودم چیزی پیدا نکردم.
ممنون

ثبت پرسش جدید

پاسخ‌ها

3
محسن بستان
محسن بستان
@mohsenbostan

تخصص: Senior Backend Developer

بهترین پاسخ

@sadrahkm
همون هم دقیقا همین طوری کار میکنه، یعنی دیتا رو در property ذخیره میکنه و در نتیجه چون شما تغییر اعمال کردید، دیتای قبلی میاد و شما باید دوباره درخواست رو ارسال کنید.

محسن بستان
محسن بستان
@mohsenbostan

تخصص: Senior Backend Developer

@sadrahkm
سلام.
در واقع اون کش نشده! شما یک شئ دارید که تغییراتی رو در دیتابیس اعمال می کنه اما خودش همون شئ قبل هستش در نتیجه با اینکه دیتا جدید در دیتابیس تغییر کرده، اما شما روی شئ فعلی دیتای قبلی رو دارید در نتیجه برای تازه کردن این موارد، باید دوباره از اول به دیتابیس درخواست ارسال بشه.

صدرا حکیم
صدرا حکیم
@sadrahkm

تخصص: توسعه دهنده لاراول

@mohsenbostan
سلام
بله متوجه این قضیه شدم. ولی ببینید من وسط کد از رابطه $project->activity استفاده کردم و یک سری داده گرفتم. بعد دوباره توی خط اخر هم از همین رابطه استفاده کردم و اطلاعات را از دیتابیس درخواست کردم. الان قاعدتا توی خط آخر باید یه کوئری جدید به دیتابیس زده بشه که Activity های مربوط به پروژه x را برگدونه. اما اینطور نیست و دقیقا Activity ها تغییر نکرده و حتما باید از fresh استفاده بشه تا موضوع حل بشه. به همین خاطر گفتم که احتمالا کش شده. حالا بازم اگه نظری دارید ممنون میشم بفرمایید

شاید پاسخ شما همین‌جا باشد

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

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