نوب
5 سال پیش توسط نوب مطرح شد
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();
    }