मैं कुछ कॉलम को दूसरी टेबल पर दोहराना चाहता हूं।

foreach ($student->father_registrars as $getFatherData) {
            $fatherID = $getFatherData->id;
          
            // PROBLEM LAYS HERE   
            $fatherData =  \App\FatherRegistrars::where('id', $fatherID)->firstOrFail()();
            $fatherData->makeHidden(['birth', 'religion', 'education', 'citizenship', 'blood', 'id_card', 'residence_province', 'residence_regency', 'residence_district', 'residence_village', 'residence_address', 'residence_kode_pos', 'company_name', 'salary', 'company_address', 'company_province', 'company_regency', 'company_district', 'company_village', 'company_kode_pos']);
            
            $replicaFatherData = $fatherData->replicate();
            $fatherDatatoArray = $replicaFatherData->toArray();

            $father = \App\User::firstOrCreate($fatherDatatoArray);

            if ($isStudentExist >= 1) {
                $father->assignRole(['Parent', 'Guardian']);
            } else {
                $father->assignRole('Parent');
            }

            $father->password = $fatherData->password;

            $father->save();

            
        }

जैसा कि आप देख सकते हैं, मैं फ़ील्ड birth, religion आदि को बाहर करता हूं। लेकिन फिर भी मुझे Column not found: 1054 Unknown column 'birth' in 'where clause' (SQL: select * from उपयोगकर्ता where... त्रुटि देता है

कुछ अजीब जब मैं foreach के बिना समान नीचे दिए गए कोड को चलाने का प्रयास करता हूं, लेकिन यह काम करता है!

$find_one = \App\StudentRegistrars::where('id', $id)->firstOrFail();
        $find_one->makeHidden(['state', 'status', 'id', 'email_sent', 'address', 'provinces', 'regencies', 'districts', 'villages', 'kode_pos', 'nickname', 'nik', 'religion', 'citizenship', 'sequence', 'weight', 'height', 'blood', 'date', 'photo', 'family_card', 'birth_certificate', 'passed']);
        $new_user = $find_one->replicate();
        $new_user = $find_one->toArray();

        $user = \App\User::firstOrCreate($new_user);
        $user->assignRole('Student Registrars');
        $user->password = $find_one->password;
        $user->save();
0
Sead Lab 29 जिंदा 2021, 16:09
आप क्वेरी को -> पहले () पर चलाते हैं। तो त्रुटि पहले ही फेंक दी गई है। क्या इससे आपके सवाल का जवाब मिलता है? stackoverflow.com/ प्रश्न/23612221/… (स्कोप को छोड़कर भाग)
 – 
Gert B.
29 जिंदा 2021, 16:12
मैंने इसका समाधान करने की कोशिश की है लेकिन फिर भी काम नहीं करता है
 – 
Sead Lab
29 जिंदा 2021, 16:14
मैंने सवाल अपडेट किया है। कृपया जांचें!
 – 
Sead Lab
29 जिंदा 2021, 16:16
आप firstOrFail() का उपयोग कर रहे हैं, इसलिए यदि यह विफल हो जाता है, तो makeHidden() काम नहीं करेगा और Column not found: 1054 Unknown column… को बढ़ा देगा।
 – 
sta
29 जिंदा 2021, 16:19
firstOrFail()(); डबल ब्रैकेट से भी छुटकारा पाएं
 – 
Mehravish Temkar
29 जिंदा 2021, 16:19

1 उत्तर

सबसे बढ़िया उत्तर

यदि आप जानते हैं कि आप किन क्षेत्रों को दो मॉडलों के बीच रख रखना चाहते हैं:

$fatherOrigin = \App\FatherRegistrars::where('id', $fatherID)->first();
$fieldsToKeep = [ 'name', 'email', ... etc ... ];

$father = new \App\User(); 
foreach($fieldsToKeep as $field) {
   $father->$field = $fatherOrigin->$field;
}

यदि आप जानते हैं कि आप किस फ़ील्ड को छोड़ना चाहते हैं:

$fatherOrigin = \App\FatherRegistrars::where('id', $fatherID)->first();
$fieldsToDiscard = [ 'birth', 'religion', ... etc ... ];
$originData = $fatherOrigin->toArray();

foreach($fieldsToDiscard as $field) {
   unset($originData[$field]);
}

$father = \App\User::firstOrCreate($originData); 
1
gbalduzzi 29 जिंदा 2021, 16:17