نوب
3 سال پیش توسط نوب مطرح شد
0 پاسخ

مشکل در insert اطلاعات به روش chunk در لاراول

@mohaligateway
@ali.bayat
@hesammousavi
سلام دوستان
من کد زیر را برای وارد کردن تعداد ردیف خیلی زیاد در لاراول نوشتم ولی خطای Call to a member function province() on bool را میده و میگه که sync ها نمیتونه id هر ردیف را بگیره و توی جداول واسط وارد کنه
ولی وقتی بدون sync مینویسم اطلاعات فقط در جدول اصلی وارد میشن
در صورت امکان راهنمایی کنین لطفا / با تشکر

این موارد را با این روش خطا میگیره

 $number->province()->sync($data1['province_id']);
            $number->city()->sync($data1['city_id']);
            $number->operator()->sync($data1['operator_id']);

به جای create از insert هم برای سرعت بیشتر استفاده کردم ولی نمیشه

    public function number_store(Request $request)
    {
        $text = trim($request->list);
        $textAr = explode("\n", $text);
        $textAr = array_filter($textAr, 'trim'); // remove any extra \r chars
        $textAr_unique = array_unique($textAr);
        $counter_unique = count($textAr_unique);
        $counter = count($textAr);
        $data1 = $request->validate([
            'list' => ['required'],
            'city_id' => ['required'],
            'operator_id' => ['required'],
            'province_id' => ['required']
        ]);
        $insert_data = [];
        foreach ($textAr_unique as $line) {
            $replaceR = str_replace("\r", '', $line);
            $number = str_replace("\n", '', $replaceR);
            if (strlen($number) >= 10) {
                $final = '+98' . substr($number, -10);
            }
            $data = [
                'title' => $final,
                'created_at' => now()->toDateTimeString(),
                'updated_at' => now()->toDateTimeString(),
            ];
            $insert_data[] = $data;

        }
        $insert_data = collect($insert_data); // Make a collection to use the chunk method

        $chunks = $insert_data->chunk(500);

        foreach ($chunks as $chunk) {
            $number = Number::insert($chunk->toArray());
            $number->province()->sync($data1['province_id']);
            $number->city()->sync($data1['city_id']);
            $number->operator()->sync($data1['operator_id']);
        }
        Alert::success("$counter_unique شماره غیر تکراری وارد شد", "تعداد $counter شماره در لیست ورودی شما وجود داشت.")->showConfirmButton('متوجه شدم', '#3085d6');
        return redirect()->back();
    }

ثبت پرسش جدید

به همدیگه کمک کنیم

به نوب کمک کنید تا مشکل خودش را حل کند؛ این‌طور می‌توانیم با هم پیشرفت کنیم.

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

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